多数据源

在实际开发中,经常可能遇到在一个应用中可能需要访问多个数据库的情况在需要切换数据源ServiceMapper方法上添加@DataSource注解@DataSource(value = DataSourceType.MASTER),其中value用来表示数据源名称

关于多数据源使用流程(如果有多个,可以参考slave添加)

支持参数如下:

参数类型默认值描述
valueDataSourceTypeDataSourceType.MASTER主库

1、在application-druid.yml配置从库数据源

  1. # 从库数据源
  2. slave:
  3. # 从数据源开关/默认关闭
  4. enabled: true
  5. url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
  6. username: root
  7. password: password

2、在DataSourceType类添加数据源枚举

  1. /**
  2. * 从库
  3. */
  4. SLAVE

3、在DruidConfig配置读取数据源

  1. @Bean
  2. @ConfigurationProperties("spring.datasource.druid.slave")
  3. @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true")
  4. public DataSource slaveDataSource(DruidProperties druidProperties)
  5. {
  6. DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
  7. return druidProperties.dataSource(dataSource);
  8. }

4、在DruidConfigdataSource方法添加数据源

  1. targetDataSources.put(DataSourceType.SLAVE.name(), slaveDataSource);

5、在需要使用多数据源方法或类上添加@DataSource注解,其中value用来表示数据源

  1. @DataSource(value = DataSourceType.SLAVE)
  2. public List<SysUser> selectUserList(SysUser user)
  3. {
  4. return userMapper.selectUserList(user);
  5. }
  1. @Service
  2. @DataSource(value = DataSourceType.SLAVE)
  3. public class SysUserServiceImpl

对于特殊情况可以通过DynamicDataSourceContextHolder手动实现数据源切换

  1. public List<SysUser> selectUserList(SysUser user)
  2. {
  3. DynamicDataSourceContextHolder.setDataSourceType(DataSourceType.SLAVE.name());
  4. List<SysUser> userList = userMapper.selectUserList(user);
  5. DynamicDataSourceContextHolder.clearDataSourceType();
  6. return userList;
  7. }

逻辑实现代码 com.ruoyi.framework.aspectj.DataSourceAspect

注意:目前配置了一个从库,默认关闭状态。如果不需要多数据源不用做任何配置。另外可新增多个从库。支持不同数据源(Mysql、Oracle、SQLServer)