多数据源
ContiNew Admin 自 v3.4.0 版本(ContiNew Starter v2.7.1)开始,移除了多数据源组件,再次降低上手成本。
如果你有需要,可以查看对应提交记录,根据提交记录逆向还原改动,即可恢复多数据源模式。下方将演示基于 MyBatis Plus ORM 框架引入多数据源的步骤。
1.首先,引入多数据源依赖。(不需要声明版本,在 ContiNew Starter 中已经锁定过了)
xml
<!-- Dynamic Datasource(基于 Spring Boot 的快速集成多数据源的启动器) -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
</dependency>
2.修改 application-dev.yml
中的数据源配置。(根据实际需要在部署前修改其他环境的数据源配置,例如:application-prod.yml
)
yaml
--- ### 数据源配置
spring.datasource:
type: com.zaxxer.hikari.HikariDataSource
## 动态数据源配置(可配多主多从:m1、s1...;纯粹多库:mysql、oracle...;混合配置:m1、s1、oracle...)
dynamic:
# 是否启用 P6Spy(SQL 性能分析组件,该插件有性能损耗,不建议生产环境使用)
p6spy: true
# 设置默认的数据源或者数据源组(默认:master)
primary: master
# 严格匹配数据源(true:未匹配到指定数据源时抛异常;false:使用默认数据源;默认 false)
strict: false
datasource:
# 主库配置(可配多个,构成多主)
master:
url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:continew_admin}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&autoReconnect=true&maxReconnects=10&failOverReadOnly=false
username: ${DB_USER:root}
password: ${DB_PWD:123456}
driver-class-name: com.mysql.cj.jdbc.Driver
type: ${spring.datasource.type}
# 从库配置(可配多个,构成多从)
slave_1:
url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:continew_admin}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&rewriteBatchedStatements=true&autoReconnect=true&maxReconnects=10&failOverReadOnly=false
username:
password:
lazy: true
driver-class-name: com.mysql.cj.jdbc.Driver
type: ${spring.datasource.type}
# Hikari 连接池配置(完整配置请参阅:https://github.com/brettwooldridge/HikariCP)
hikari:
# 最大连接数量(默认 10,根据实际环境调整)
# 注意:当连接达到上限,并且没有空闲连接可用时,获取连接将在超时前阻塞最多 connectionTimeout 毫秒
maximum-pool-size: 20
# 获取连接超时时间(默认 30000 毫秒,30 秒)
connection-timeout: 30000
# 空闲连接最大存活时间(默认 600000 毫秒,10 分钟)
idle-timeout: 600000
# 保持连接活动的频率,以防止它被数据库或网络基础设施超时。该值必须小于 maxLifetime(默认 0,禁用)
keepaliveTime: 30000
# 连接最大生存时间(默认 1800000 毫秒,30 分钟)
max-lifetime: 1800000
3.修改 application.yml
中的 MyBatis Plus 配置,移除数据库类型指定。
yaml
--- ### MyBatis Plus 配置
mybatis-plus:
## 扩展配置
extension:
enabled: true
# Mapper 接口扫描包配置
mapper-package: ${project.base-package}.**.mapper
# ID 生成器配置
id-generator:
type: COSID
# 数据权限配置
data-permission:
enabled: true
# 分页插件配置
pagination:
enabled: true
db-type:
4.操作完上方步骤后即完成了多数据源的引入,可以使用 @DS
切换数据源。
java
@Service
@DS("slave")
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
@DS("slave_1")
public List selectByCondition() {
return jdbcTemplate.queryForList("select * from user where age > 10");
}
}
参考资料
1.多数据源支持 | MyBatis-Plus:https://baomidou.com/guides/dynamic-datasource/