谈一谈Spring-Mybatis在多数据源配置上的坑

概述

先聊一聊业务背景,随着系统服务的不断开发,我们的系统会充斥着各种个样的业务.这种时候,我们应该要开始考虑一下如何将系统的粒度细化.举个常见的例子: 电商系统可以拆分为 商品模块,订单模块,地址模块等等.这些模块都可以独立抽取出来,形成一个单独的服务.这就会涉及到各个模块之间的通信问题,一些简单的服务,我们可以通过 rpc 接口 直接进行通信,但是有些服务却不适用这种模式.本文主要讲一下在多数据源路上遇到的一些坑.

多数据源

 

 

项目结构

源码地址: github.com/jaycekon/Sp…

 

目录结构

 

配置文件: DataSourceConfig

    @Bean(name = "masterDataSource")     @Qualifier("masterDataSource")     @ConfigurationProperties(prefix = "spring.datasource")     public DataSource masterDataSource() {         return DataSourceBuilder.create().build();     }     @Bean(name = "slaveDataSource")     @Qualifier("slaveDataSource")     @ConfigurationProperties(prefix = "spring.datasource.db2")     public DataSource slaveDataSource() {         return DataSourceBuilder.create().build();     }     @Bean     @Primary     public DynamicDataSource dataSource(@Qualifier("masterDataSource") DataSource master,                                         @Qualifier("slaveDataSource") DataSource slave) {         Map<Object, Object> targetDataSources = new HashMap<>();         targetDataSources.put(DatabaseType.db1, master);         targetDataSources.put(DatabaseType.db2, slave);         DynamicDataSource dataSource = new DynamicDataSource();         dataSource.setTargetDataSources(targetDataSources);// 该方法是AbstractRoutingDataSource的方法         dataSource.setDefaultTargetDataSource(master);// 默认的datasource设置为myTestDbDataSource         return dataSource;     }     @Bean     public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource myTestDbDataSource,                                                @Qualifier("slaveDataSource") DataSource myTestDb2DataSource) throws Exception {         SqlSessionFactoryBean fb = new SqlSessionFactoryBean();         fb.setDataSource(this.dataSource(myTestDbDataSource, myTestDb2DataSource));         fb.setTypeAliasesPackage(env.getProperty("mybatis.type-aliases-package"));         fb.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(env.getProperty("mybatis.mapper-locations")));         return fb.getObject();     } 复制代码

项目创建流程可以参: 《Spring-Mybatis 读写分离》

数据库

test_1:

CREATE TABLE `school` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `school_name` varchar(255) DEFAULT NULL,   `province` varchar(255) DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 复制代码

test_2:

CREATE TABLE `user` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `username` varchar(255) DEFAULT NULL,   `password` varchar(255) DEF
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大老二在不在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值