当前位置:   article > 正文

Springboot 配置多数据源、切换数据源_两个数据源设置datasourcetranscatonmanager

两个数据源设置datasourcetranscatonmanager

有些项目场景需要支持不同数据源切换或者多种数据源(mysql、sqlserver、oracle),本次分享就可以满足这一需求。

 

1.配置第一数据源(我这里写为主数据源、有些不太准确)

  1. import com.alibaba.druid.pool.DruidDataSource;
  2. import org.apache.ibatis.session.SqlSessionFactory;
  3. import org.mybatis.spring.SqlSessionFactoryBean;
  4. import org.mybatis.spring.SqlSessionTemplate;
  5. import org.mybatis.spring.annotation.MapperScan;
  6. import org.springframework.beans.factory.annotation.Qualifier;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.boot.context.properties.ConfigurationProperties;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import org.springframework.context.annotation.Primary;
  12. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  13. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  14. import javax.sql.DataSource;
  15. /**
  16. *
  17. * @Description: 主数据源切换 mysql sqlServer oracle
  18. * @Author: xyh
  19. * @Date: 2019/8/15 13:33
  20. */
  21. @Configuration
  22. @ConfigurationProperties(prefix = "spring.datasource.master")
  23. @MapperScan(basePackages = "com.test.mapper.master", sqlSessionFactoryRef = "masterSqlSessionFactory")
  24. public class MasterDataSourceConfig {
  25. @Value("${spring.datasource.master.url}")
  26. private String url;
  27. @Value("${spring.datasource.master.username}")
  28. private String username;
  29. @Value("${spring.datasource.master.password}")
  30. private String password;
  31. @Value("${spring.datasource.master.driverClassName}")
  32. private String driverClass;
  33. @Value("${spring.datasource.master.type}")
  34. private String type;
  35. /**
  36. * mybatis xml路径
  37. */
  38. private String mybatisPattern;
  39. @Primary
  40. @Bean(name = "masterDataSource")
  41. public DataSource dataSource() {
  42. DruidDataSource dataSource = new DruidDataSource();
  43. dataSource.setDriverClassName(driverClass);
  44. dataSource.setUrl(url);
  45. dataSource.setUsername(username);
  46. dataSource.setPassword(password);
  47. dataSource.setDbType(type);
  48. mybatisPattern = "classpath:mybatis/master/*.xml";
  49. if (url.contains("sqlserver")) {
  50. dataSource.setValidationQuery("select 1");
  51. } else if (url.contains("oracle")) {
  52. dataSource.setValidationQuery("select 1 from dual");
  53. }
  54. return dataSource;
  55. }
  56. @Primary
  57. @Bean(name = "masterSqlSessionFactory")
  58. public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
  59. SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
  60. factoryBean.setDataSource(dataSource);
  61. factoryBean.setTypeAliasesPackage("com.ewell.portal.domain");
  62. factoryBean.setMapperLocations(
  63. new PathMatchingResourcePatternResolver().getResources(mybatisPattern));
  64. return factoryBean.getObject();
  65. }
  66. @Primary
  67. @Bean(name = "masterTransactionManager")
  68. public DataSourceTransactionManager transactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
  69. return new DataSourceTransactionManager(dataSource);
  70. }
  71. @Bean(name = "masterSqlSessionTemplate")
  72. @Primary
  73. public SqlSessionTemplate sqlSessionTemplate(
  74. @Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
  75. return new SqlSessionTemplate(sqlSessionFactory);
  76. }
  77. }

 

2.配置文件配置

  1. #mysql数据源
  2. spring.datasource.master.url=jdbc:mysql://192.168.10.74:3306/test?useUnicode=true&characterEncoding=UTF8
  3. spring.datasource.master.username=test
  4. spring.datasource.master.password=test
  5. spring.datasource.master.type=com.alibaba.druid.pool.DruidDataSource
  6. spring.datasource.master.driverClassName=com.mysql.cj.jdbc.Driver
  7. #sqlserver数据源
  8. #spring.datasource.master.url=jdbc:jtds:sqlserver://192.168.10.76:1433;DatabaseName=test
  9. #spring.datasource.master.username=test
  10. #spring.datasource.master.password=test
  11. #spring.datasource.master.type=com.alibaba.druid.pool.DruidDataSource
  12. #spring.datasource.master.driverClassName=net.sourceforge.jtds.jdbc.Driver
  13. #oracle数据源
  14. #spring.datasource.master.url=jdbc:oracle:thin:@192.168.150.160:1521:test
  15. #spring.datasource.master.username=test
  16. #spring.datasource.master.password=test
  17. #spring.datasource.master.type=com.alibaba.druid.pool.DruidDataSource
  18. #spring.datasource.master.driverClassName=oracle.jdbc.driver.OracleDriver
  19. #其他数据源
  20. #spring.datasource.slave.url=jdbc:jtds:sqlserver://192.168.10.76:1433;DatabaseName=test
  21. #spring.datasource.slave.username=test
  22. #spring.datasource.slave.password=test
  23. #spring.datasource.slave.type=com.alibaba.druid.pool.DruidDataSource
  24. #spring.datasource.slave.driverClassName=net.sourceforge.jtds.jdbc.Driver

 

 

3.配置第二数据源(或者更多)

  1. import com.alibaba.druid.pool.DruidDataSource;
  2. import org.apache.ibatis.session.SqlSessionFactory;
  3. import org.mybatis.spring.SqlSessionFactoryBean;
  4. import org.mybatis.spring.SqlSessionTemplate;
  5. import org.mybatis.spring.annotation.MapperScan;
  6. import org.springframework.beans.factory.annotation.Qualifier;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.boot.context.properties.ConfigurationProperties;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import org.springframework.context.annotation.Primary;
  12. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  13. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  14. import javax.sql.DataSource;
  15. /**
  16. *
  17. * @Description: 其他数据源配置 mysql sqlServer oracle
  18. * @Author: xyh
  19. * @Date: 2019/8/15 13:33
  20. */
  21. @Configuration
  22. @ConfigurationProperties(prefix = "spring.datasource.slave")
  23. @MapperScan(basePackages = "com.test.mapper.slave", sqlSessionFactoryRef = "slaveSqlSessionFactory")
  24. public class SlaveDataSourceConfig {
  25. @Value("${spring.datasource.slave.url}")
  26. private String url;
  27. @Value("${spring.datasource.slave.username}")
  28. private String username;
  29. @Value("${spring.datasource.slave.password}")
  30. private String password;
  31. @Value("${spring.datasource.slave.driverClassName}")
  32. private String driverClass;
  33. @Value("${spring.datasource.slave.type}")
  34. private String type;
  35. /**
  36. * mybatis xml路径
  37. */
  38. private String mybatisPattern;
  39. @Bean(name = "slaveDataSource")
  40. public DataSource dataSource() {
  41. DruidDataSource dataSource = new DruidDataSource();
  42. dataSource.setDriverClassName(driverClass);
  43. dataSource.setUrl(url);
  44. dataSource.setUsername(username);
  45. dataSource.setPassword(password);
  46. dataSource.setDbType(type);
  47. mybatisPattern = "classpath:mybatis/slave/*.xml";
  48. if (url.contains("sqlserver")) {
  49. dataSource.setValidationQuery("select 1");
  50. } else if (url.contains("oracle")) {
  51. dataSource.setValidationQuery("select 1 from dual");
  52. }
  53. return dataSource;
  54. }
  55. @Bean(name = "slaveSqlSessionFactory")
  56. public SqlSessionFactory sqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
  57. SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
  58. factoryBean.setDataSource(dataSource);
  59. factoryBean.setTypeAliasesPackage("com.ewell.portal.domain");
  60. factoryBean.setMapperLocations(
  61. new PathMatchingResourcePatternResolver().getResources(mybatisPattern));
  62. return factoryBean.getObject();
  63. }
  64. @Bean(name = "slaveTransactionManager")
  65. public DataSourceTransactionManager transactionManager(@Qualifier("slaveDataSource") DataSource dataSource) {
  66. return new DataSourceTransactionManager(dataSource);
  67. }
  68. @Bean(name = "slaveSqlSessionTemplate")
  69. public SqlSessionTemplate sqlSessionTemplate(
  70. @Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
  71. return new SqlSessionTemplate(sqlSessionFactory);
  72. }
  73. }

 

4.项目结构

5.maven引用

  1. <!-- mysql驱动包 -->
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. <version>8.0.13</version>
  6. </dependency>
  7. <!-- oracle驱动包 -->
  8. <dependency>
  9. <groupId>com.oracle</groupId>
  10. <artifactId>ojdbc6</artifactId>
  11. <version>11.2.0.3</version>
  12. </dependency>
  13. <!-- MS SQL驱动包 -->
  14. <dependency>
  15. <groupId>com.microsoft.sqlserver</groupId>
  16. <artifactId>sqljdbc4</artifactId>
  17. <version>4.0</version>
  18. </dependency>

总结:数据源配置类通过读取配置文件配置,连接数据库。配置类中配置mapper、xml扫描路径,service根据业务逻辑调用不同的数据源的mapper,以此实现该需求。

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号