news 2026/4/17 8:56:06

这才是SpirngBoot轻松整合MybatisPlus多数据源的正确打开方式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
这才是SpirngBoot轻松整合MybatisPlus多数据源的正确打开方式

有一个这样子的需求,线上正在跑的业务,由于业务发展需要,需重新开发一套新系统,等新系统开发完成后,需要无缝对接切换,当初具体设计见草图。

添加依赖#

<!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.16</version> <!--scope=provided,说明它是在编译阶段生效,不需要打入包中,Lombok在编译期将带Lombok注解的Java文件正确编译为完整的Class文件--> <scope>provided</scope> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--mybatis plus和spring boot整合--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency>

application.properties#

server.port=9999 spring.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.master.url=jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.master.username=root spring.datasource.master.password=root spring.datasource.slave.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.slave.jdbc-url=jdbc:mysql://127.0.0.1/test2?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.slave.username=root spring.datasource.slave.password=root

2种方式创建DataSource#

Master配置,使用druid连接池#

import com.alibaba.druid.pool.DruidDataSource; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.env.Environment; import javax.sql.DataSource; /** * @Author:chenyanbin */ @Configuration @MapperScan(basePackages = "com.example.demo.mapper", sqlSessionFactoryRef = "masterSqlSessionFactory") public class MasterDataSourceConfig { @Autowired private Environment env; @Primary @Bean(name = "masterDataSource") // @ConfigurationProperties("spring.datasource.master") public DataSource masterDataSource() { // return DataSourceBuilder.create().build(); DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(env.getProperty("spring.datasource.master.url")); dataSource.setUsername(env.getProperty("spring.datasource.master.username")); dataSource.setPassword(env.getProperty("spring.datasource.master.password")); dataSource.setDriverClassName(env.getProperty("spring.datasource.master.driver-class-name")); //配置初始化大小、最小、最大 dataSource.setMinIdle(10); //配置初始化大小、最小、最大 dataSource.setMaxActive(200); //配置初始化大小、最小、最大 dataSource.setInitialSize(10); //配置获取连接等待超时的时间 dataSource.setMaxWait(60000); //配置一个连接在池中最小生存的时间,单位是毫秒 dataSource.setMinEvictableIdleTimeMillis(300000); //配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 dataSource.setTimeBetweenEvictionRunsMillis(60000); //默认的testWhileIdle=true,testOnBorrow=false,testOnReturn=false dataSource.setValidationQuery("SELECT 1"); //申请连接时执行validationQuery检测连接是否有效 dataSource.setTestOnBorrow(false); //建议配置为true,不影响性能,并且保证安全性。 dataSource.setTestWhileIdle(true); //是否缓存preparedStatement,也就是PSCache dataSource.setPoolPreparedStatements(false); return dataSource; } @Bean(name = "masterSqlSessionFactory") public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); return sessionFactoryBean.getObject(); } }

Slave配置#

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; /** * @Author:chenyanbin */ @Configuration @MapperScan(basePackages = "com.example.demo.mapper2",sqlSessionFactoryRef = "slaveSqlSessionFactory") public class SlaveDataSourceConfig { @Bean(name = "slaveDataSource") @ConfigurationProperties("spring.datasource.slave") public DataSource slaveDataSource(){ return DataSourceBuilder.create().build(); } @Bean(name = "slaveSqlSessionFactory") public SqlSessionFactory sqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); return sessionFactoryBean.getObject(); } }

注意#

master和slave扫描不同的mapper包路径!!!!!!

如果需要指定.xml文件,需这样配置!!!

@Bean(name = "masterSqlSessionFactory") public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath:mapper/**/*.xml")); return sessionFactoryBean.getObject(); }

启动类#

@SpringBootApplication( exclude = {DataSourceAutoConfiguration.class, MybatisPlusAutoConfiguration.class} )

启动类上排查,自动装配,使用我们自定义的多数据源!!!

演示#

多个数据源,同时也是支持事务的

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:56:10

Windows系统PostgreSQL向量搜索终极指南:快速部署与实战应用

Windows系统PostgreSQL向量搜索终极指南&#xff1a;快速部署与实战应用 【免费下载链接】pgvector Open-source vector similarity search for Postgres 项目地址: https://gitcode.com/GitHub_Trending/pg/pgvector 想要在Windows环境下为PostgreSQL数据库添加强大的A…

作者头像 李华
网站建设 2026/4/16 15:42:40

好写作AI实战指南:从“写作困难户”到“高产学者”的桥梁

如果你也经历过&#xff1a;对着空白文档超过半小时写不出标题&#xff0c;文献堆积如山却理不清脉络&#xff0c;格式调得焦头烂额——别担心&#xff0c;这恰是我们搭建“桥梁”的起点。好写作AI官方网址&#xff1a;https://www.haoxiezuo.cn/第一步&#xff1a;诊断你的“写…

作者头像 李华
网站建设 2026/4/16 22:28:15

如何优化EmotiVoice输出语音的情感强度?

如何优化EmotiVoice输出语音的情感强度&#xff1f; 在虚拟主播的直播中&#xff0c;一句“谢谢你的礼物”可以是平淡致谢&#xff0c;也可以是激动到破音的欢呼&#xff1b;在游戏NPC的对话里&#xff0c;“小心背后&#xff01;”如果是用慵懒语调说出&#xff0c;再紧急的信…

作者头像 李华
网站建设 2026/4/18 5:34:46

智能Agent在Docker中的网络架构设计(容器互联技术深度剖析)

第一章&#xff1a;智能Agent与Docker容器互联技术概述 在现代分布式系统架构中&#xff0c;智能Agent与Docker容器的协同工作正成为提升自动化运维与服务调度能力的关键技术。智能Agent具备环境感知、决策推理和自主执行的能力&#xff0c;而Docker容器则提供了轻量级、可移植…

作者头像 李华