SpringBoot里头怎么弄Mybatis-Plus连接好几个数据库,感觉挺实用的一个整合方案
- 问答
- 2026-01-03 10:57:28
- 3
SpringBoot里头整合Mybatis-Plus来连接多个数据库,这个需求在实际项目中确实挺常见的,你可能需要从一个专门存储用户信息的数据库里查数据,同时又要去另一个存放业务订单的数据库进行操作,下面我就直接跟你说说怎么弄,尽量不用那些晦涩的专业术语。

你得明白一个核心概念,在SpringBoot里,通常我们用一个数据源(DataSource)连一个数据库,Mybatis-Plus也是基于这个数据源工作的,要想连多个库,本质上就是要在项目里配置多个数据源,然后让Mybatis-Plus知道在操作哪个Mapper(就是那个写SQL接口的东西)的时候,该去用哪个数据源。
第一步,往你的SpringBoot项目里加依赖,除了正常的Mybatis-Plus依赖(比如mybatis-plus-boot-starter),你还需要一个关键的东西,就是能支持动态数据源的组件,Mybatis-Plus官方其实提供了一个很好用的扩展,叫dynamic-datasource-spring-boot-starter,你直接在项目的pom.xml文件里加上这个依赖就行了,这个包会帮我们处理很多底层切换数据源的麻烦事。

第二步,就是重头戏了:配置多个数据库的连接信息,我们不在原来那个application.yml或application.properties文件里用spring.datasource开头的配置了,而是用这个动态数据源插件规定的方式来写,你可以给每个数据库起个名字,比如master(主库)、slave(从库),或者按业务分,比如user_db、order_db,然后在配置文件里,你会定义一个主数据源(比如叫master),然后再列出其他几个数据源,每个都配上它们自己的数据库驱动、连接地址、用户名和密码,这样,这个动态数据源插件就会帮你管理这一堆连接池。
第三步,你需要告诉Mybatis-Plus,哪些Mapper接口应该用哪个数据源,这个动态数据源插件用了种很简单的方法:通过注解(Annotation),你可以在你的Mapper接口上,直接加一个@DS注解,括号里写上你在配置文件里给那个数据源起的名字,处理用户数据的Mapper,你就给它加上@DS("user_db");处理订单的Mapper,就加@DS("order_db"),这样,当程序调用这个Mapper的方法时,动态数据源插件就会自动切换到对应的数据库去执行SQL,如果你某个方法特别,不想用接口上默认的数据源,你甚至可以把注解加到具体的方法上,方法上的注解优先级更高。
第四步,你可能还会遇到一个问题,就是事务管理(Transaction Management),平时单数据源时,Spring用一个事务管理器就够了,但现在有多个数据源了,事务管理器也得对应多个,你需要为每个数据源都配置一个独立的事务管理器(比如叫DataSourceTransactionManager),并且给它们起不同的名字,在你需要事务控制的方法上,你用Spring的@Transactional注解时,可以特别指定用哪个数据源对应的事务管理器(通过transactionManager属性),这样,事务才能在这个指定的数据库上正确生效,不会乱套,不过要注意,这种简单方式很难做到跨多个数据库的所谓“分布式事务”(就是保证两个库的操作要么都成功,要么都失败),那种情况需要更复杂的方案(比如Seata)。
还有一些细节要注意,你的Mybatis-Plus配置类(如果有的话)可能需要做一些调整,确保它不会和动态数据源的配置冲突,虽然这个动态数据源插件很好用,但你在写代码的时候心里得有数,知道每个数据库操作背后是连的哪个库,避免因为注解写错地方导致数据访问出错。
用Mybatis-Plus的这个动态数据源扩展来连接多数据库,思路很清晰:加依赖 -> 配多个数据源连接信息 -> 在Mapper或方法上用注解指定用哪个数据源 -> 处理好多数据源下的事务问题,这套方案在实践中被很多人用过,比较成熟,能很好地解决多数据库访问的需求。

本文由盈壮于2026-01-03发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/73659.html
