springboot 中怎么利用mybatis 配置多数据源
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,今天就跟大家聊聊有关springboot 中怎么利用mybatis 配置多数据源,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、项目启动成功
千家信息网最后更新 2025年01月23日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安全错误
数据库的锁怎样保障安全
银川市服务器运维
山东济南服务器
数据库数据用逗号分隔
百沃网络技术有限公司
大学数据库管理系统学什么
中国网络技术受制于美国吗
雅海软件开发
营销网络技术代理品牌
运维管理软件开发费用
如何保障财务服务器安全
网络安全空间学什么待遇如何
网络技术基础与计算机思维
福建教育网络安全攻防大赛
博山快消品软件开发价格
什么叫企业软件开发业务需求
四川新一代网络技术服务技术
廊坊专题护苗网络安全系列课堂
微信订阅号 数据库
ts80x服务器支持raid
怎么查看电视的网络安全
win7安装远程服务器管理工具
软件开发服务方案百度文库
中国网络技术受制于美国吗
华夏软件开发培训学校
达梦数据库如何去除字段中空格
互联网电话服务器
vps与服务器的区别
互联网新科技价格
软件开发校招题
谈一谈网络技术的历