springboot配置多个数据源
序言
业务场景复杂时,可能会用到多个数据源,多数据源可以理解为多数据库,甚至可以是多个不同类型的数据库,比如一个是MySql,一个是Oracle,原理是相同的。
多数据源配置
1、配置多数据库
在springboot配置文件中填写数据库连接参数
spring: datasource: db1: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://127.0.0.1:3306/db1 username: root password: root db2: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://127.0.0.1:3306/db2 username: root password: root hikari: maximum-pool-size: 5 minimumIdle: 5 idleTimeout: 600000 connectionTimeout: 30000 maxLifetime: 1800000
这里是配置mysql数据库的两个schema,db1和db2,当然也可以配置多个不同的数据库实例,修改相应的参数即可
2、将配置的多数据源与springboot整合
db1数据源

1 package com.test.demo.config.datasource; 2 3 4 import org.apache.ibatis.session.SqlSessionFactory; 5 import org.mybatis.spring.SqlSessionFactoryBean; 6 import org.mybatis.spring.SqlSessionTemplate; 7 import org.mybatis.spring.annotation.MapperScan; 8 import org.springframework.beans.factory.annotation.Qualifier; 9 import org.springframework.boot.context.properties.ConfigurationProperties; 10 import org.springframework.boot.jdbc.DataSourceBuilder; 11 import org.springframework.context.annotation.Bean; 12 import org.springframework.context.annotation.Configuration; 13 import org.springframework.core.io.support.PathMatchingResourcePatternResolver; 14 import org.springframework.jdbc.datasource.DataSourceTransactionManager; 15 import org.springframework.transaction.support.TransactionTemplate; 16 17 import javax.sql.DataSource; 18 19 @Configuration 20 @MapperScan(basePackages = "com.test.demo.mapper.db1", sqlSessionTemplateRef = "db1SqlSessionTemplate", sqlSessionFactoryRef = "db1SqlSessionFactory") 21 public class Db1DataSourceConfig { 22 @Bean 23 @ConfigurationProperties(prefix = "spring.datasource.db1") 24 public DataSource db1DataSource() { 25 return DataSourceBuilder.create().build(); 26 } 27 28 @Bean 29 public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception { 30 SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); 31 bean.setDataSource(dataSource); 32 org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); 33 configuration.setMapUnderscoreToCamelCase(true); 34 bean.setConfiguration(configuration); 35 bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db1/*.xml")); 36 return bean.getObject(); 37 } 38 39 @Bean 40 public DataSourceTransactionManager db1TransactionManager(@Qualifier("db1DataSource") DataSource dataSource) { 41 return new DataSourceTransactionManager(dataSource); 42 } 43 44 @Bean 45 public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) { 46 return new SqlSessionTemplate(sqlSessionFactory); 47 } 48 49 @Bean 50 public TransactionTemplate db1TransactionTemplate(@Qualifier("db1TransactionManager") DataSourceTransactionManager dataSourceTransactionManager) { 51 return new TransactionTemplate(dataSourceTransactionManager); 52 } 53 }
db2数据源

1 package com.test.demo.config.datasource; 2 3 4 import org.apache.ibatis.session.SqlSessionFactory; 5 import org.mybatis.spring.SqlSessionFactoryBean; 6 import org.mybatis.spring.SqlSessionTemplate; 7 import org.mybatis.spring.annotation.MapperScan; 8 import org.springframework.beans.factory.annotation.Qualifier; 9 import org.springframework.boot.context.properties.ConfigurationProperties; 10 import org.springframework.boot.jdbc.DataSourceBuilder; 11 import org.springframework.context.annotation.Bean; 12 import org.springframework.context.annotation.Configuration; 13 import org.springframework.core.io.support.PathMatchingResourcePatternResolver; 14 import org.springframework.jdbc.datasource.DataSourceTransactionManager; 15 import org.springframework.transaction.support.TransactionTemplate; 16 17 import javax.sql.DataSource; 18 19 @Configuration 20 @MapperScan(basePackages = "com.test.demo.mapper.db2", sqlSessionTemplateRef = "db2SqlSessionTemplate", sqlSessionFactoryRef = "db2SqlSessionFactory") 21 public class Db2DataSourceConfig { 22 /** 23 * 配置db2的数据源 24 * @return 25 */ 26 @Bean 27 @ConfigurationProperties(prefix = "spring.datasource.db2") 28 public DataSource db2DataSource() { 29 return DataSourceBuilder.create().build(); 30 } 31 32 /** 33 * 配置该数据源的sql会话工厂 34 * @param dataSource 35 * @return 36 * @throws Exception 37 */ 38 @Bean 39 public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception { 40 SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); 41 bean.setDataSource(dataSource); 42 org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); 43 configuration.setMapUnderscoreToCamelCase(true); 44 bean.setConfiguration(configuration); 45 46 bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db2/*.xml")); 47 return bean.getObject(); 48 } 49 50 51 /** 52 * 配置该数据源的事务管理器 53 * @param dataSource 54 * @return 55 */ 56 @Bean 57 public DataSourceTransactionManager db2TransactionManager(@Qualifier("db2DataSource") DataSource dataSource) { 58 return new DataSourceTransactionManager(dataSource); 59 } 60 61 /** 62 * 配置db2数据源的sql会话模板 63 * @param sqlSessionFactory 64 * @return 65 */ 66 @Bean 67 public SqlSessionTemplate db2SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) { 68 return new SqlSessionTemplate(sqlSessionFactory); 69 } 70 71 72 /** 73 * 配置db2数据源的事务模板 74 * @param dataSourceTransactionManager 75 * @return 76 */ 77 @Bean 78 public TransactionTemplate db2TransactionTemplate(@Qualifier("db2TransactionManager") DataSourceTransactionManager dataSourceTransactionManager) { 79 return new TransactionTemplate(dataSourceTransactionManager); 80 } 81 }
3、使用
分别将不同数据源的mapper xml文件放入上面配置的对应的路径下,启动项目即可
本文作者:wang_longan
本文链接:https://www.cnblogs.com/longan-wang/p/16140174.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步