springboot 中怎么利用mybatis 配置多数据源
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,今天就跟大家聊聊有关springboot 中怎么利用mybatis 配置多数据源,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、项目启动成功
千家信息网最后更新 2026年10月31日springboot 中怎么利用mybatis 配置多数据源
今天就跟大家聊聊有关springboot 中怎么利用mybatis 配置多数据源,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
一、项目启动成功后创建bean的方式
pom.xml
com.alibaba druid-spring-boot-starter 1.1.10 com.ojdbc ojdbc 10.2.0.1 system ${project.basedir}/src/main/lib/ojdbc14-10.2.0.1.0.jar mysql mysql-connector-java 5.1.38
application.properties
#oracle数据库spring.datasource.master.url=jdbc:oracle:thin:@localhost:1521:testspring.datasource.master.username=oraclespring.datasource.master.password=123456spring.datasource.master.driverClassName=oracle.jdbc.OracleDriverspring.datasource.master.initialSize=5spring.datasource.master.maxActive=15spring.datasource.master.minIdle=5spring.datasource.master.poolPreparedStatements=truespring.datasource.master.validationQuery=SELECT 1 FROM DUAL#配置执行多条sql比如:批量处理#对应的错误:sql injection violation, multi-statement not allowspring.datasource.master.wall.multiStatementAllow=true#配置执行特殊sql比如sql server的创建临时表(declare)语句#对应的错误:sql injection violation, class com.alibaba.druid.sql.ast.statement.SQLDeclareStatement not allowspring.datasource.master.wall.noneBaseStatementAllow=true#mysql数据库spring.datasource.slave.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8spring.datasource.slave.username=mysqlspring.datasource.slave.password=123456spring.datasource.slave.driverClassName=com.mysql.cj.jdbc.Driverspring.datasource.slave.initialSize=5spring.datasource.slave.maxActive=15spring.datasource.slave.minIdle=5spring.datasource.slave.poolPreparedStatements=truespring.datasource.slave.validationQuery=SELECT 1#配置执行多条sql比如:批量处理#对应的错误:sql injection violation, multi-statement not allowspring.datasource.master.wall.multiStatementAllow=true#配置执行特殊sql比如sql server的创建临时表(declare)语句#对应的错误:sql injection violation, class com.alibaba.druid.sql.ast.statement.SQLDeclareStatement not allowspring.datasource.master.wall.noneBaseStatementAllow=true
MasterDataSourceConfig.java
注:Primary注解代表该数据源为主数据源
package com.core.dataSource;import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;/** * oracle数据配置 */@Configuration//配置mapper文件目录,进行扫描@MapperScan(basePackages = "com.wawj.core.mapper.master", sqlSessionTemplateRef = "masterSqlSessionTemplate")public class MasterDataSourceConfig { /** * 创建数据源 * @return */ @Bean @Primary @ConfigurationProperties(prefix = "spring.datasource.master") public DataSource masterDataSource() { return DruidDataSourceBuilder.create().build(); } /** * 创建工厂 * @param dataSource * @return * @throws Exception */ @Bean @Primary public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); //指定mapper.xml的目录 bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/master/**/*.xml")); //指定实体类目录 bean.setTypeAliasesPackage("com.wawj.core.entity"); return bean.getObject(); } /** * 创建事务 * @param dataSource * @return */ @Bean @Primary public DataSourceTransactionManager masterTransactionManager(@Qualifier("masterDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } /** * 创建模板 * @param sqlSessionFactory * @return */ @Bean @Primary public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); }}SlaveDataSourceConfig.java
package com.core.dataSource;import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;/** * mysql数据配置 */@Configuration//配置mapper文件目录,进行扫描@MapperScan(basePackages = "com.wawj.core.mapper.slave", sqlSessionTemplateRef = "slaveSqlSessionTemplate")public class SlaveDataSourceConfig { /** * 创建数据源 * @return */ @Bean @ConfigurationProperties(prefix = "spring.datasource.slave") public DataSource slaveDataSource() { return DruidDataSourceBuilder.create().build(); } /** * 创建工厂 * @param dataSource * @return * @throws Exception */ @Bean public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); //指定mapper.xml的目录 bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/slave/**/*.xml")); //指定实体类目录 bean.setTypeAliasesPackage("com.wawj.core.entity"); return bean.getObject(); } /** * 创建事务 * @param dataSource * @return */ @Bean public DataSourceTransactionManager slaveTransactionManager(@Qualifier("slaveDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } /** * 创建模板 * @param sqlSessionFactory * @return */ @Bean public SqlSessionTemplate slaveSqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); }}这种方式初始化的是时候在druid控制台(http://localhost:8080/druid/login.html)中的数据源标签是没有,要请求过后才会显示当前连接的数据源
二、使用dynamic-datasource 动态配置(项目启动的时候创建)
pom.xml
com.alibaba druid-spring-boot-starter 1.1.10 com.baomidou dynamic-datasource-spring-boot-starter 2.5.6 com.ojdbc ojdbc 10.2.0.1 system ${project.basedir}/src/main/lib/ojdbc14-10.2.0.1.0.jar mysql mysql-connector-java 5.1.38
application.properties
#全局默认值,可以全局更改spring.datasource.dynamic.druid.initial-size=5spring.datasource.dynamic.druid.max-active=5spring.datasource.dynamic.druid.min-idle=5spring.datasource.dynamic.druid.pool-prepared-statements=true#配置执行多条sql比如:批量处理#对应的错误:sql injection violation, multi-statement not allowspring.datasource.dynamic.druid.wall.multi-statement-allow=true#配置执行特殊sql比如sql server的创建临时表(declare)语句#对应的错误:sql injection violation, class com.alibaba.druid.sql.ast.statement.SQLDeclareStatement not allowspring.datasource.dynamic.druid.wall.none-base-statement-allow=true#oracle数据库spring.datasource.dynamic.datasource.master.driver-class-name=oracle.jdbc.OracleDriverspring.datasource.dynamic.datasource.master.druid.validation-query=SELECT 1 FROM DUALspring.datasource.dynamic.datasource.master.url=jdbc:oracle:thin:@localhost:1521:testspring.datasource.dynamic.datasource.master.username=oraclespring.datasource.dynamic.datasource.master.password=123456#mysql数据库spring.datasource.dynamic.datasource.slave.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.dynamic.datasource.slave.druid.validation-query=SELECT 1spring.datasource.dynamic.datasource.slave.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8spring.datasource.dynamic.datasource.slave.username=mysqlspring.datasource.dynamic.datasource.slave.password=123456#指定master为主数据源spring.datasource.dynamic.primary=master#排除原生Druid的快速配置类(DruidDataSourceAutoConfigure会注入一个DataSourceWrapper,其会在原生的spring.datasource下找url,username,password等。而我们动态数据源的配置路径是变化的。)spring.autoconfigure.exclude=com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure#设置dynamic登录名spring.datasource.druid.stat-view-servlet.login-username=admin#设置dynamic密码spring.datasource.druid.stat-view-servlet.login-password=admin#mybatis mapper locationmybatis-plus.mapper-locations=classpath:mapper/**/*.xmlmybatis-plus.type-aliases-package=com.wawj.core.entity
这种方式使用注解(@DS("数据源名称"))切换数据源
@DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。
注解在service实现或mapper接口方法上,但强烈不建议同时在service和mapper注解。 (可能会有问题)
| 注解 | 结果 |
|---|---|
| 没有@DS | 默认数据源 |
| @DS("dsName") | dsName可以为组名也可以为具体某个库的名称 |
补充:排除原生的DruidDataSourceAutoConfigure也可以在springboot启动类排除(某些springBoot的版本上面可能无法排除就在application.properties中配置排除)
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}或#application.propertiesspring.autoconfigure.exclude=com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure看完上述内容,你们对springboot 中怎么利用mybatis 配置多数据源有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
数据
配置
数据源
注解
目录
错误
数据库
特殊
内容
多条
方式
方法
语句
处理
事务
全局
动态
同时
名称
实体
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
咖啡网
广州大一互联网络科技有限公司
河南云网互联网络科技有限公司
今日互联网科技
互联网科技社
麻工互联网科技
互联网科技的发展
中国 科技 互联网
奇酷互联网科技
华中科技大学互联网
奇士达互联网科技
互联网科技论坛
福州新华互联网科技学校 知乎
来此购互联网科技有限公司
科技互联网大厂
广州燕处互联网科技有限公司
西安左小互联网科技有限公司
同城互联网络科技
华人运通互联网科技公司
恒生互联网科技趋势
深圳互联网科技公司
美国互联网科技
天津摩尔互联网科技
北京禾田雨橡互联网科技
互联网科技视频素材
博兴的互联网电子科技公司
互联网科技热点资讯
上海科技产业互联网平台
山东蛋芒互联网科技有限公司
黑龙江互联网科技公司