一、背景

如果一个系统存在多个业务数据库,那么就意味着在该系统中存在多个数据源,此时针对数据库的操作如何让其具体的落地到某个库中呢?

二、解决办法

一个解决办法就是mybatis不同的mapper文件对应不同的数据源,这样service在操作不同的mapper时即操作了不同的数据源

三、实现

1、yml文件中配置多个数据源
spring: datasource: druid: old: driver-class-name:
com.microsoft.sqlserver.jdbc.SQLServerDriver url: xxx username: xxx password:
xxx initial-size: 5 max-active: 10 max-wait: 10000 validationQuery: SELECT 1
new: driver-class-name: com.mysql.cj.jdbc.Driver url: xxx username: xxx
password: xxx initial-size: 5 max-active: 10 max-wait: 10000 validationQuery:
SELECT 1

2、配置文件中配置数据源,数据库的session工厂以及事务管理器
@Configuration public class DataSourceConfigNew { /** * 返回dataSourceNew数据库的数据源
*/ @Bean(name = "dataSourceNew") @Primary//主数据源 @ConfigurationProperties(prefix
= "spring.datasource.druid.new") public DataSource dataSourceNew() { return new
DruidDataSource(); } /** * 返回dataSourceNew数据库的会话工厂 */ @Bean(name =
"dataSqlSessionFactoryNew") @Primary public SqlSessionFactory
sqlSessionFactoryNew(@Qualifier("dataSourceNew") DataSource ds) throws
Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setMapperLocations(new
PathMatchingResourcePatternResolver().getResources("classpath:/mapper/new/*.xml"));
bean.setDataSource(ds); return bean.getObject(); } /** * 返回dataSourceNew数据库的事务
*/ @Bean(name = "dataTransactionManagerNew") @Primary public
DataSourceTransactionManager transactionManager1(@Qualifier("dataSourceNew")
DataSource ds) { return new DataSourceTransactionManager(ds); } }

3、为mapper文件指定对应的数据源
@Configuration @MapperScan(basePackages = "com.test.mapper.newMapper",
sqlSessionFactoryRef = "dataSqlSessionFactoryNew") public class
DataSourceConfigNew { }

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信