[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"qk_443_300.png","link":"https://pan.quark.cn/s/6229b93c70d0","name":"夸克网盘","status":9,"txt":"夸克网盘","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
一、背景
如果一个系统存在多个业务数据库,那么就意味着在该系统中存在多个数据源,此时针对数据库的操作如何让其具体的落地到某个库中呢?
二、解决办法
一个解决办法就是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 { }