Java实现动态切换数据源

本文介绍了如何在Spring项目中使用AbstractRoutingDataSource动态管理多个数据库连接,根据登录账号信息自动切换数据源,通过Redis存储数据库配置。实例演示了如何设置数据源和测试方法,适用于分库部署的系统需求。

在一般的Java项目中,如果使用Spring去管理数据库连接信息,一般只能连接一个数据库,可是会有部分情况我们需要连接多个数据库,甚至还会存在不同的请求需要根据配置信息连接不同的数据库,比如:

在很多sass系统中,是采用分库部署的方式,就是不同账号连接的是不同的数据库,可是服务只有一个,所以就需要根据登录的账号信息动态切换数据源。

下面给出一个简单的demo,如果有需要大家可以根据自己的情况去改写。

我们知道,spring在执行sql的时候,是要先获取DataSource对象,然后getConnection获取连接,然后再执行excuteSql去真正执行sql语句。所以在sql执行之前将DataSource对象替换掉,就能动态切换数据源。

这里我们需要用到抽象类AbstractRoutingDataSource,我们需要继承这个类,并且重写determineTargetDataSource方法,这个方法会返回DataSource对象。

@Component
public class DynamicDataSource extends AbstractRoutingDataSource {
    public final static String JDBC_CONNECT_PARAM = "?useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true";

    static RedissonClient redissonClient;
    @Autowired
    public void setRedisCache(RedissonClient redissonClient) {
        DynamicDataSource.redissonClient = redissonClient;
    }

    /**
     * 数据源MAP
     */
    public stati
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值