spring-dynamicDatasource,spirng动态数据源在spring-boot的使用方式。
动态数据源主要使用就是多个库动态切换,比如主从读写分离,垂直分库,业务分库等等需求。
主要原理:
动态数据源的原理就是继承AbstractRoutingDataSource,实现其中的一个determineCurrentLookupKey方法
/**
* 如何获取数据源(bean的名称)的方式,从我们实现的DbContextHolder线程变量中获取。
**/
@Override
protected Object determineCurrentLookupKey() {
return DbContextHolder.getDbType();
}
这个方法返回的字符串,会在spring容器中已经配置的数据源map表中查找,查找到了就返回对应的数据源。DbContextHolder主要是包装了一个线程局部变量。
具体使用: (创建2个数据库,db_0 , db_1 ,2个库都有一个user表(id,name,age),这个步骤省略)
1、在app.properties配置2个数据源
## 默认数据源指定为dataSource_zero
spring.dynamicDatasource.defaultDataSource=dataSource_zero
spring.datasource.my.type=com.alibaba.druid.pool.DruidDataSource
## zero数据源
spring.datasource.dataSource_zero.url=jdbc:mysql://127.0.0.1:3306/db_0?useUnicode=true&characterEncoding=UTF-8&useSSL=false&rewriteBatchedStatements=true
spring.datasource.dataSource_zero.username=root
spring.datasource.dataSource_zero.password=123456
spring.datasource.dataSource_zero.driverClassName=com.mysql.jdbc.Driver
## one号数据源
spring.datasource.dataSource_one.url=