SpringBoot集成mybatis分包配置多数据源
admin
2024-04-15 05:37:18
0

从今天开始我分享一下配置多数据源的多种方式,多维度、动态、多租户定制化配置多种数据源,此篇我们进行SpringBoot集成mybatis分包配置多数据源,这是比较通用的配置方式,大家也容易理解,废话少说我们进入正题!

1、数据库级数据准备:

在本地新建两个数据库,名称分别为user_master 和user_slave ,新建一张user表,表结构就是通常的字段,姓名、年龄等,就不细说了。

2、pom文件核心jar引入:

        org.springframework.bootspring-boot-starter-weborg.mybatis.spring.bootmybatis-spring-boot-starter2.1.0mysqlmysql-connector-javaruntime

3、yml 多个数据源的配置信息:

server:port: 8090 # 启动端口
spring:datasource: masterDb: # 数据源1jdbc-url: jdbc:mysql://localhost:3306/user_master?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8username: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.DriverslaveDb: # 数据源2jdbc-url: jdbc:mysql://localhost:3306/user_slave?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8username: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver

注意:各个版本的 springboot 配置 datasource 时参数有所变化,例如低版本配置数据库 url时用 url 属性,高版本使用 jdbc-url 属性!

4、服务启动初始化数据源配置:每个库采用一个配置文件处理

  4.1、   主数据源配置:

@Configuration
@MapperScan(basePackages = "com.nandao.multipledatasource.mapper.masterBb", sqlSessionFactoryRef = "db1SqlSessionFactory")
public class MasterDataSourceConfig {@Primary // 表示这个数据源是默认数据源, 这个注解必须要加,因为不加的话spring将分不清楚那个为主数据源(默认数据源),导致启动服务时会报找不到主数据源的错误@Bean("db1DataSource")@ConfigurationProperties(prefix = "spring.datasource.masterBb") //读取application.yml中的配置参数映射成为一个对象public DataSource getDb1DataSource(){return DataSourceBuilder.create().build();}@Primary@Bean("db1SqlSessionFactory")public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);// mapper的xml形式文件位置必须要配置,不然将报错:no statement (这种错误也可能是mapper的xml中,namespace与项目的路径不一致导致)bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/db1/*.xml"));return bean.getObject();}@Primary@Bean("db1SqlSessionTemplate")public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){return new SqlSessionTemplate(sqlSessionFactory);}
}

  4.2、 从数据源配置:

@Configuration
@MapperScan(basePackages = "com.nandao.multipledatasource.mapper.slaveDb", sqlSessionFactoryRef = "db2SqlSessionFactory")
public class SlaveDataSourceConfig {@Bean("db2DataSource")@ConfigurationProperties(prefix = "spring.datasource.slaveDb")public DataSource getDb1DataSource(){return DataSourceBuilder.create().build();}@Bean("db2SqlSessionFactory")public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/db2/*.xml"));return bean.getObject();}@Bean("db2SqlSessionTemplate")public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory){return new SqlSessionTemplate(sqlSessionFactory);}
}

注意事项:
在 service 层中根据不同的业务注入不同的 dao 层如果是主从复制- -读写分离:比如 masterDb 中负责增删改,slaveDb 中负责查询。但是需要注意的是负责增删改的数据库必须是主库(master).

到此、最常用的多数据配置分享完毕,此维度业务场景是读写分离的场景,如果是不同的业务配置不同的数据源,也是类似的配置,只不过是业务数据源的名称不同而已,比如两个数据库:user_db、order_db等等,下篇我们从另外一个维度分享多数据源获取,根据请求的类型、用户,判断选用哪个数据源,动态获取,敬请期待!

 

 

相关内容

热门资讯

原创 四... 浮躁,几乎是每个人都经历过的状态,我自己也不例外。每天,我总会在脑海中幻想,什么时候才能一夜暴富,抛...
第十一篇,连锁企业扩张:别把资... 连锁企业的扩张之战,从来不是“广撒网、多敛鱼”的盲目博弈,而是“精准聚焦、集中发力”的战略取舍。前文...
原创 假... “关羽大意失荆州”这一典故,无论历史课本还是民间传说中都耳熟能详。人们普遍认为,关羽的失误和疏忽注定...
标普500银行指数下跌2.2%... 标普500银行指数下跌2.2%。 来源:金融界AI电报
董宇辉未来在直播带货和内容创作... 来源:新浪乐迷公社 从东方甄选独立后,董宇辉以“与辉同行”为起点,正通过战略重构直播带货与内容创作的...
国开行2025年发放公路基础设... 记者从国家开发银行获悉,2025年,国开行发放公路基础设施贷款超3600亿元,同比增长10%。“十四...
2月23日晚间重要公告集锦 前沿生物:与葛兰素史克签署授权许可协议;国投资本:国投瑞银白银期货证券投资基金估值调整预计对公司20...
推进民生实事许昌市妇幼保健院实... 本报讯(记者 常娟 许冬冬)作为“两癌”“两筛”工作的直接承担者,推进“两癌”(乳腺癌、宫颈癌)“两...
当区块链遇见供应链:一场透明与... 在全球化经济的浪潮中,供应链如同世界的血液循环系统,将原材料、零部件和成品跨越国界输送到每一个角落。...
深夜突发,美股全线跳水,近40... 每经编辑:何小桃,宋思艰 2月24日凌晨,美股突然跳水。 截至发稿,道指跌1.68%,跌幅超800点...
四川春节假期消费市场“马力十足... 封面新闻记者 易弋力 吃团年饭、赏花灯、观非遗、看电影、踏春旅游、以旧换新、沉浸购物……马年春节,迎...
早盘:美股走低科技股领跌 纳指... 来源:环球市场播报 北京时间2月17日晚,美股周二早盘走低,主要股指延续了上周的下跌趋势。此前遭受重...
原创 今... 已经打响的2026年家电市场“零售争夺”大战,对于行业所有厂商来说,压力巨大、压力激增。特别是,对于...
云南省属企业2025年利润同比... 记者从日前举行的全省省属企业负责人会议上获悉,2025年云南省属企业利润同比增长147.57%,增加...
集体杀跌!刚刚,13.67万人... 加密货币集体跳水! 今日(2月23日),在地缘政治紧张及美国关税不确定性上升的双重打击下,加密货币市...
国发股份详解2025年预亏原因... 每经记者:吴泽鹏 每经编辑:文多 1月17日发布2025年年度业绩预亏公告后,国发股份(SH6005...
公司上了94个“数字员工”,干... 内容来源:2026年2月12日,大树AI创业圈视频号第50期 访谈 渊虹分享内容 。 分享嘉宾: 渊...
如何构建一个完美的投票系统?必... 一、明确投票系统的需求 微信搜索关键词(中正投票)一键进入小程序,创建你需要活动模版,一键搭建专属投...
孙宇晨现身GWDC2026:定... 近日,区块链行业的年度盛事GWDC2026在万众瞩目中拉开帷幕。作为本次大会的联合主办方与钻石赞助商...
白癜风医生刘云涛:白癜风与维生... 维生素B族是人体必需的水溶性维生素,包含多种亚型,参与人体新陈代谢、神经系统调节和皮肤细胞修复,对白...