详情请参考若依官方文档
1、ruoyi-admin模块
在application-druid.yml配置从库数据源
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: true
url:jdbc:mysql://localhost:3306/ms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
2、ruoyi-common模块
在enums文件夹的DataSourceType类中添加数据源枚举
public enum DataSourceType
{
/**
* 主库 对应库名ry-vue
*/
MASTER,
/**
* 从库 对应库名ms
*/
SLAVE
}
3、ruoyi-framework模块
在config文件夹的DruidConfig配置读取数据源
/**
* 从库 对应yml中的数据源slave ms数据库
* @param druidProperties
* @return
*/
@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);
}
在DruidConfig类dataSource方法添加数据源
setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource");
4、在需要使用多数据源方法或类上添加@DataSource注解,其中value用来表示数据源
@DataSource(value = DataSourceType.SLAVE)
public List<SysUser> selectUserList(SysUser user)
{
return userMapper.selectUserList(user);
}
@Service
@DataSource(value = DataSourceType.SLAVE)
public class SysUserServiceImpl
5、手动切换数据源
在需要切换数据源的方法中使用DynamicDataSourceContextHolder类实现手动切换,使用方法如下
public List<SysUser> selectUserList(SysUser user)
{
DynamicDataSourceContextHolder.setDataSourceType(DataSourceType.SLAVE.name());
List<SysUser> userList = userMapper.selectUserList(user);
DynamicDataSourceContextHolder.clearDataSourceType();
return userList;
}
二、使用多数据源 ruoyi-generator生成代码模块
在controller文件夹下的GenController控制器上 新增一个DataSource注解,指定当前控制器所有操作 都走指定的数据源SLAVE :后续生成哪个数据源的代码 只要指定对应的数据源就行,不指定 则默认主库
@RestController
@RequestMapping("/tool/gen")
@DataSource(value = DataSourceType.SLAVE)
public class GenController extends BaseController