对若依的多数据源配置总结
多数据源在实际开发中,经常可能遇到在一个应用中可能需要访问多个数据库的情况在需要切换数据源Service或Mapper方法上添加@DataSource注解@DataSource(value = DataSourceType.MASTER),其中value用来表示数据源名称提示关于多数据源使用流程(如果有多个,可以参考slave添加)支持参数如下:参数类型默认值描述value.
多数据源
在实际开发中,经常可能遇到在一个应用中可能需要访问多个数据库的情况
在需要切换数据源Service或Mapper方法上添加@DataSource注解
@DataSource(value = DataSourceType.MASTER),其中value用来表示数据源名称
提示
关于多数据源使用流程(如果有多个,可以参考slave添加)
支持参数如下:
参数 | 类型 | 默认值 | 描述 |
value | DataSourceType | DataSourceType.MASTER | 主库 |
1、在application-druid.yml配置从库数据源
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: true
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: password
2、在DataSourceType类添加数据源枚举
/**
* 从库
*/
SLAVE
3、在DruidConfig配置读取数据源
@Bean@ConfigurationProperties("spring.datasource.druid.slave")@ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true")public DataSource slaveDataSource(DruidProperties druidProperties){
DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
return druidProperties.dataSource(dataSource);}
4、在DruidConfig类dataSource方法添加数据源
setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource");
5、在需要使用多数据源方法或类上添加@DataSource注解,其中value用来表示数据源
@DataSource(value = DataSourceType.SLAVE)public List<SysUser> selectUserList(SysUser user){
return userMapper.selectUserList(user);}
@Service@DataSource(value = DataSourceType.SLAVE)public class SysUserServiceImpl
对于特殊情况可以通过DynamicDataSourceContextHolder手动实现数据源切换
public List<SysUser> selectUserList(SysUser user){
DynamicDataSourceContextHolder.setDataSourceType(DataSourceType.SLAVE.name());
List<SysUser> userList = userMapper.selectUserList(user);
DynamicDataSourceContextHolder.clearDataSourceType();
return userList;}
逻辑实现代码 com.ruoyi.framework.aspectj.DataSourceAspect
注意:目前配置了一个从库,默认关闭状态。如果不需要多数据源不用做任何配置。 另外可新增多个从库。支持不同数据源(Mysql、Oracle、SQLServer)
以下是驱动:
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 主库数据源
master:
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://127.0.0.1;SelectMethod=cursor;DatabaseName=QMSVue
username: sa
password: 123
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: true
driverClassName : com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: password
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username:
login-password:
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true
配置不同类型的数据源分页pagehelper采用自动识别分页:
# PageHelper分页插件
pagehelper:
autoRuntimeDialect: true
reasonable: true
supportMethodsArguments: true
params: count=countSql
敲黑板:
oracle数据库时把测试连接配置为空;
更多推荐
所有评论(0)