一、导入依赖

##导入对应的数据库依赖oracle、mysql、clickhouse等。

	<dependency>
		<groupId>com.baomidou</groupId>
		<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
		<version>3.1.0</version>
	</dependency>

二、编写yml 配置文件

  datasource:
    dynamic:
      druid:
        initial-size: 5
        min-idle: 5
        maxActive: 20
        # 配置获取连接等待超时的时间
        maxWait: 60000
        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 6000
        # 配置一个连接在池中最小生存的时间,单位是毫秒
        minEvictableIdleTimeMillis: 60000
        # 配置一个连接在池中最大生存的时间,单位是毫秒
        maxEvictableIdleTimeMillis: 900000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        # 打开PSCache,并且指定每个连接上PSCache的大小
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        # 主库数据源
        master:
          driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
          url: jdbc:mysql://localhost:3306/table1?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
          username: xxxx
          password: xxxxx
          validationQuery: SELECT 1 FROM DUAL
        # 从库数据源**(这里是clickhouse)**
        slave:
          driver-class-name: ru.yandex.clickhouse.ClickHouseDriver 
          url: jdbc:clickhouse://XX.XX.XX:8123/XXXX
          username: xxxx
          password: xxxxx
          validationQuery: SELECT 1

三、使用@DS注解时,有如下注意事项:

1.不能使用事务,否则数据源不会切换,使用的还是第一次加载的数据源;

2.第一次加载数据源之后,第二次、第三次…操作其它数据源,如果数据源不存在,使用的还是第一次加载的数据源;

3.数据源名称不要包含下划线,否则不能切换。
上面配置了两个数据源,master与slave,其中选择master作为默认数据源;
若想使用slave作为部分代码的数据源,可在ServiceImpl或者某个方法上做如下配置:

方式一:
	@DS("slave")
	public interface XxxxMapper extends BaseMapper<Xxxx> {
	 
}

方式二:
 @DS("slave")
    @Override
    public Result Xxxx() throws InterruptedException {
        
   }

方式三:
    @Override
    public Result Xxxx() throws InterruptedException {
	try {
			//开启slave数据源
            DynamicDataSourceContextHolder.push("slave");
        } finally {
        	//关闭或释放slave数据源
            DynamicDataSourceContextHolder.poll();
        }    
     }
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐