news 2026/8/26 23:01:10

这才是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/8/27 2:28:18

好写作AI构思革命:当AI开始理解你的“潜台词”与学术野心

如果语法检查是确保你“衣着整洁”&#xff0c;那么深层构思辅助就是帮你练出“思想的八块腹肌”——前者让你能出门&#xff0c;后者让你在学术舞台上脱颖而出。好写作AI官方网址&#xff1a;https://www.haoxiezuo.cn/学术写作的“冰山困境”&#xff1a;海面下的才是重点研究…

作者头像 李华
网站建设 2026/8/26 14:27:15

你还在手动调试量子电路?VSCode扩展配置指南来了!

第一章&#xff1a;量子模拟器 VSCode 扩展的配置为在本地开发环境中高效运行和调试量子算法&#xff0c;配置支持量子计算的 Visual Studio Code 扩展至关重要。通过安装专用扩展包&#xff0c;开发者可在熟悉的编辑器中编写量子电路、模拟执行结果并可视化量子态。安装 Quant…

作者头像 李华
网站建设 2026/8/26 6:47:19

好写作AI诚信伙伴:当AI成为学术红绿灯,而非“代写捷径”

如果AI写作工具被比作汽车&#xff0c;那么学术诚信就是交通规则——好写作AI的设计理念&#xff0c;是成为最智能的“导航与防碰撞系统”&#xff0c;而不是教你如何超速又不被拍的“神秘代码”。好写作AI官方网址&#xff1a;https://www.haoxiezuo.cn/功能设计核心&#xff…

作者头像 李华
网站建设 2026/8/26 22:03:51

多模态大模型对齐技术演进史:从CLIP到智能体的三条技术路线全解析!

简介 本文详细解析了多模态大模型对齐技术的演进路径&#xff0c;归纳为三条技术路线&#xff1a;CLIP模型的对比学习基础、生成模型的组装式对齐策略&#xff0c;以及Data Agent系统的自迭代数据飞轮。这些路线分别从表征基础、模型架构与数据生态三个维度&#xff0c;推动多…

作者头像 李华
网站建设 2026/8/27 1:48:39

申晓宁·路演培训领军人用实力护航

“路演时讲不清核心优势&#xff0c;投资人频频看表&#xff1b;项目亮点埋在冗长表述里&#xff0c;错失融资机会&#xff1b;舞台紧张到声音发颤&#xff0c;辜负团队心血”——不少创业者和企业负责人都曾陷入这样的路演困境&#xff0c;此时一个专业的路演培训老师&#xf…

作者头像 李华