服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SpringBoot多数据源配置详细教程(JdbcTemplate、mybatis)

SpringBoot多数据源配置详细教程(JdbcTemplate、mybatis)

2021-08-26 11:02互联网编程 Java教程

这篇文章主要介绍了SpringBoot多数据源配置详细教程(JdbcTemplate、mybatis),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

多数据源配置

首先是配置文件

  • 这里采用yml配置文件,其他类型配置文件同理
  • 我配置了两个数据源,一个名字叫ds1数据源,一个名字叫ds2数据源,如果你想配置更多的数据源,继续加就行了
  1. spring:
  2. # 数据源配置
  3. datasource:
  4. ds1: #数据源1
  5. driver-class-name: com.mysql.jdbc.Driver # mysql的驱动你可以配置别的关系型数据库
  6. url: jdbc:mysql://ip:3306/db1 #数据源地址
  7. username: root # 用户名
  8. password: root # 密码
  9. ds2: # 数据源2
  10. driver-class-name: com.mysql.jdbc.Driver # mysql的驱动你可以配置别的关系型数据库
  11. url: jdbc:mysql://ip:3307/db2#数据源地址
  12. username: root # 用户名
  13. password: root # 密码

多数据源配置

增加一个Springboot的配置类

  1. /**
  2. * 多数据源配置
  3. */
  4. @Configuration
  5. public class DataSourceConfig {
  6.  
  7. //主数据源配置 ds1数据源
  8. @Primary
  9. @Bean(name = "ds1DataSourceProperties")
  10. @ConfigurationProperties(prefix = "spring.datasource.ds1")
  11. public DataSourceProperties ds1DataSourceProperties() {
  12. return new DataSourceProperties();
  13. }
  14.  
  15. //主数据源 ds1数据源
  16. @Primary
  17. @Bean(name = "ds1DataSource")
  18. public DataSource ds1DataSource(@Qualifier("ds1DataSourceProperties") DataSourceProperties dataSourceProperties) {
  19. return dataSourceProperties.initializeDataSourceBuilder().build();
  20. }
  21.  
  22. //第二个ds2数据源配置
  23. @Bean(name = "ds2DataSourceProperties")
  24. @ConfigurationProperties(prefix = "spring.datasource.ds2")
  25. public DataSourceProperties ds2DataSourceProperties() {
  26. return new DataSourceProperties();
  27. }
  28.  
  29. //第二个ds2数据源
  30. @Bean("ds2DataSource")
  31. public DataSource ds2DataSource(@Qualifier("ds2DataSourceProperties") DataSourceProperties dataSourceProperties) {
  32. return dataSourceProperties.initializeDataSourceBuilder().build();
  33. }
  34. }

JdbcTemplate多数据源配置

增加一个Springboot配置类

  1. /**
  2. * JdbcTemplate多数据源配置
  3. * 依赖于数据源配置
  4. *
  5. * @see DataSourceConfig
  6. */
  7. @Configuration
  8. public class JdbcTemplateDataSourceConfig {
  9.  
  10. //JdbcTemplate主数据源ds1数据源
  11. @Primary
  12. @Bean(name = "ds1JdbcTemplate")
  13. public JdbcTemplate ds1JdbcTemplate(@Qualifier("ds1DataSource") DataSource dataSource) {
  14. return new JdbcTemplate(dataSource);
  15. }
  16.  
  17. //JdbcTemplate第二个ds2数据源
  18. @Bean(name = "ds2JdbcTemplate")
  19. public JdbcTemplate ds2JdbcTemplate(@Qualifier("ds2DataSource") DataSource dataSource) {
  20. return new JdbcTemplate(dataSource);
  21. }
  22. }

mybatis 多数据源配置

增加一个SpringBoot配置类

mybatis多数据源的原理是根据不同包,调用不同的数据源,你只需要把你的mapper.java和mapper.xml(我喜欢叫dao.java和dao.xml)写在某个package中,springboot自动帮你实现数据源切换
核心代码就这句

  1. @MapperScan(basePackages ="com.web.ds2.**.dao", sqlSessionTemplateRef = "ds2SqlSessionTemplate")

用来指定包扫描指定sqlSessionTemplateRef
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/web/ds2/**/*.xml"));
用来指定mapper.xml的路径

详细配置代码如下

  1. /**
  2. * Mybatis主数据源ds1配置
  3. * 多数据源配置依赖数据源配置
  4. * @see DataSourceConfig
  5. */
  6. @Configuration
  7. @MapperScan(basePackages ="com.web.ds1.**.dao", sqlSessionTemplateRef = "ds1SqlSessionTemplate")
  8. public class MybatisPlusConfig4ds1 {
  9.  
  10. //主数据源 ds1数据源
  11. @Primary
  12. @Bean("ds1SqlSessionFactory")
  13. public SqlSessionFactory ds1SqlSessionFactory(@Qualifier("ds1DataSource") DataSource dataSource) throws Exception {
  14. MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
  15. sqlSessionFactory.setDataSource(dataSource);
  16. sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
  17. getResources("classpath*:com/web/ds1/**/*.xml"));
  18. return sqlSessionFactory.getObject();
  19. }
  20.  
  21. @Primary
  22. @Bean(name = "ds1TransactionManager")
  23. public DataSourceTransactionManager ds1TransactionManager(@Qualifier("ds1DataSource") DataSource dataSource) {
  24. return new DataSourceTransactionManager(dataSource);
  25. }
  26.  
  27. @Primary
  28. @Bean(name = "ds1SqlSessionTemplate")
  29. public SqlSessionTemplate ds1SqlSessionTemplate(@Qualifier("ds1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
  30. return new SqlSessionTemplate(sqlSessionFactory);
  31. }
  32. }
  1. /**
  2. * Mybatis 第二个ds2数据源配置
  3. * 多数据源配置依赖数据源配置
  4. * @see DataSourceConfig
  5. */
  6. @Configuration
  7. @MapperScan(basePackages ="com.web.ds2.**.dao", sqlSessionTemplateRef = "ds2SqlSessionTemplate")
  8. public class MybatisPlusConfig4ds2 {
  9.  
  10. //ds2数据源
  11. @Bean("ds2SqlSessionFactory")
  12. public SqlSessionFactory ds2SqlSessionFactory(@Qualifier("ds2DataSource") DataSource dataSource) throws Exception {
  13. MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
  14. sqlSessionFactory.setDataSource(dataSource);
  15. sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
  16. getResources("classpath*:com/web/ds2/**/*.xml"));
  17. return sqlSessionFactory.getObject();
  18. }
  19.  
  20. //事务支持
  21. @Bean(name = "ds2TransactionManager")
  22. public DataSourceTransactionManager ds2TransactionManager(@Qualifier("ds2DataSource") DataSource dataSource) {
  23. return new DataSourceTransactionManager(dataSource);
  24. }
  25.  
  26. @Bean(name = "ds2SqlSessionTemplate")
  27. public SqlSessionTemplate ds2SqlSessionTemplate(@Qualifier("ds2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
  28. return new SqlSessionTemplate(sqlSessionFactory);
  29. }
  30. }

mybatis-plus 多数据源配置

mybatis-plus是mybatis的增强版,只增加,不影响。也就是说使用mybatis-plus兼容原来所有的mybatis代码和配置。然后又做了很多增加和简化使用,具体看官网教程https://mybatis.plus/

相对于mybatis的多数据源配置就是改了下 SqlSessionFactory
核心代码就是修改mybatis为mybatis-plus,如下

  1. @Bean("ds2SqlSessionFactory")
  2. public SqlSessionFactory ds2SqlSessionFactory(@Qualifier("ds2DataSource") DataSource dataSource) throws Exception {
  3. MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
  4. sqlSessionFactory.setDataSource(dataSource);
  5. MybatisConfiguration configuration = new MybatisConfiguration();
  6. configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
  7. configuration.setJdbcTypeForNull(JdbcType.NULL);
  8. sqlSessionFactory.setConfiguration(configuration);
  9. sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
  10. getResources("classpath*:com/web/ds2/**/*.xml"));
  11. sqlSessionFactory.setPlugins(new Interceptor[]{
  12. new PaginationInterceptor(),
  13. new PerformanceInterceptor()
  14. // .setFormat(true),
  15. });
  16. sqlSessionFactory.setGlobalConfig(new GlobalConfig().setBanner(false));
  17. return sqlSessionFactory.getObject();
  18. }

全部配置代码如下

  1. /**
  2. * Mybatis-plus ds2数据源配置
  3. * 多数据源配置依赖数据源配置
  4. * @see DataSourceConfig
  5. */
  6. @Configuration
  7. @MapperScan(basePackages ="com.web.ds2.**.dao", sqlSessionTemplateRef = "ds2SqlSessionTemplate")
  8. public class MybatisPlusConfig4ds2{
  9.  
  10. //ds2数据源
  11. @Bean("ds2SqlSessionFactory")
  12. public SqlSessionFactory ds2SqlSessionFactory(@Qualifier("ds2DataSource") DataSource dataSource) throws Exception {
  13. MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
  14. sqlSessionFactory.setDataSource(dataSource);
  15. MybatisConfiguration configuration = new MybatisConfiguration();
  16. configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
  17. configuration.setJdbcTypeForNull(JdbcType.NULL);
  18. sqlSessionFactory.setConfiguration(configuration);
  19. sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
  20. getResources("classpath*:com/web/ds2/**/*.xml"));
  21. sqlSessionFactory.setPlugins(new Interceptor[]{
  22. new PaginationInterceptor(),
  23. new PerformanceInterceptor()
  24. // .setFormat(true),
  25. });
  26. sqlSessionFactory.setGlobalConfig(new GlobalConfig().setBanner(false));
  27. return sqlSessionFactory.getObject();
  28. }
  29.  
  30. @Bean(name = "ds2TransactionManager")
  31. public DataSourceTransactionManager ds2TransactionManager(@Qualifier("ds2DataSource") DataSource dataSource) {
  32. return new DataSourceTransactionManager(dataSource);
  33. }
  34.  
  35. @Bean(name = "ds2SqlSessionTemplate")
  36. public SqlSessionTemplate ds2SqlSessionTemplate(@Qualifier("ds2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
  37. return new SqlSessionTemplate(sqlSessionFactory);
  38. }
  39. }
  1. /**
  2. * Mybatis-plus 主数据源ds1配置
  3. * 多数据源配置依赖数据源配置
  4. * @see DataSourceConfig
  5. */
  6. @Configuration
  7. @MapperScan(basePackages ="com.web.ds1.**.dao", sqlSessionTemplateRef = "ds1SqlSessionTemplate")
  8. public class MybatisPlusConfig4ds1 {
  9.  
  10. //主数据源 ds1数据源
  11. @Primary
  12. @Bean("ds1SqlSessionFactory")
  13. public SqlSessionFactory ds1SqlSessionFactory(@Qualifier("ds1DataSource") DataSource dataSource) throws Exception {
  14. MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
  15. sqlSessionFactory.setDataSource(dataSource);
  16. MybatisConfiguration configuration = new MybatisConfiguration();
  17. configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
  18. configuration.setJdbcTypeForNull(JdbcType.NULL);
  19. sqlSessionFactory.setConfiguration(configuration);
  20. sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
  21. getResources("classpath*:com/ds1/web/ds1/**/*.xml"));
  22. sqlSessionFactory.setPlugins(new Interceptor[]{
  23. new PaginationInterceptor(),
  24. new PerformanceInterceptor()
  25. // .setFormat(true),
  26. });
  27. sqlSessionFactory.setGlobalConfig(new GlobalConfig().setBanner(false));
  28. return sqlSessionFactory.getObject();
  29. }
  30.  
  31. @Primary
  32. @Bean(name = "ds1TransactionManager")
  33. public DataSourceTransactionManager ds1TransactionManager(@Qualifier("ds1DataSource") DataSource dataSource) {
  34. return new DataSourceTransactionManager(dataSource);
  35. }
  36.  
  37. @Primary
  38. @Bean(name = "ds1SqlSessionTemplate")
  39. public SqlSessionTemplate ds1SqlSessionTemplate(@Qualifier("ds1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
  40. return new SqlSessionTemplate(sqlSessionFactory);
  41. }
  42. }

到此这篇关于SpringBoot多数据源配置详细教程(JdbcTemplate、mybatis)的文章就介绍到这了,更多相关SpringBoot多数据源配置内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.jianshu.com/p/dfd5ae340011

延伸 · 阅读

精彩推荐