?dynamic-datasource-spring-boot-starter
? 是一個(gè)基于springboot的快速集成多數(shù)據(jù)源的啟動(dòng)器。
其支持 ?Jdk 1.7+
?, ?SpringBoot 1.4.x 1.5.x 2.x.x
?
ENC()
?。schema
?和數(shù)據(jù)庫(kù)?database
?。DS(3.2.0+)
?。Druid
?,?HikariCp
?,?BeeCp
?,?Dbcp2
?的快速集成。Mybatis-Plus
?,?Quartz
?,?ShardingJdbc
?,?P6sy
?,?Jndi
?等組件的集成方案。spel
?動(dòng)態(tài)參數(shù) 解析數(shù)據(jù)源方案。內(nèi)置?spel
?,?session
?,?header
?,支持自定義。
CRUD
?。_
分割的數(shù)據(jù)源 首部 即為組的名稱(chēng),相同組名稱(chēng)的數(shù)據(jù)源會(huì)放在一個(gè)組下。master
,你可以通過(guò) ?spring.datasource.dynamic.primary
? 修改。DS
?支持繼承抽象類(lèi)上的?DS
?,暫不支持繼承接口上的?DS
?。
dynamic-datasource-spring-boot-starter
?<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency>
spring:
datasource:
dynamic:
primary: master #設(shè)置默認(rèn)的數(shù)據(jù)源或者數(shù)據(jù)源組,默認(rèn)值即為master
strict: false #嚴(yán)格匹配數(shù)據(jù)源,默認(rèn)false. true未匹配到指定數(shù)據(jù)源時(shí)拋異常,false使用默認(rèn)數(shù)據(jù)源
datasource:
master:
url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver # 3.2.0開(kāi)始支持SPI可省略此配置
slave_1:
url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
slave_2:
url: ENC(xxxxx) # 內(nèi)置加密,使用請(qǐng)查看詳細(xì)文檔
username: ENC(xxxxx)
password: ENC(xxxxx)
driver-class-name: com.mysql.jdbc.Driver
#......省略
#以上會(huì)配置一個(gè)默認(rèn)庫(kù)master,一個(gè)組slave下有兩個(gè)子庫(kù)slave_1,slave_2
# 多主多從 純粹多庫(kù)(記得設(shè)置primary) 混合配置
spring: spring: spring:
datasource: datasource: datasource:
dynamic: dynamic: dynamic:
datasource: datasource: datasource:
master_1: mysql: master:
master_2: oracle: slave_1:
slave_1: sqlserver: slave_2:
slave_2: postgresql: oracle_1:
slave_3: h2: oracle_2:
@DS
? 切換數(shù)據(jù)源?@DS
? 可以注解在方法上或類(lèi)上,同時(shí)存在就近原則 方法上注解 優(yōu)先于 類(lèi)上注解。
注解 | 結(jié)果 |
沒(méi)有@DS | 默認(rèn)數(shù)據(jù)源 |
@DS("dsName") | dsName可以為組名也可以為具體某個(gè)庫(kù)的名稱(chēng) |
@Service
@DS("slave")
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public List selectAll() {
return jdbcTemplate.queryForList("select * from user");
}
@Override
@DS("slave_1")
public List selectByCondition() {
return jdbcTemplate.queryForList("select * from user where age >10");
}
}
更多建議: