springboot mybatis 多数据源配置
首先导入mybatis等包,这里就不多说。
下面是配置多数据源和mybatis,每个数据源对应一套mybatis模板
数据源1:
package com.aaaaaaa.config.datasource; import javax.sql.DataSource; 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.autoconfigure.jdbc.DataSourceBuilder;
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; /**
*
* @desc 支持多数据源配置,复制一份代码修改所有appdb即可<br>
* 以该数据源为主数据源。只能设置@Primary到一份数据源作为主数据源
* @author josnow
* @date 2018年1月12日 下午9:58:18
* @version 1.0.0
*/
@Configuration
@MapperScan(basePackages = "com.aaaaaaa.mapper.appdb", sqlSessionTemplateRef = "appdbSqlSessionTemplate")
public class DataSourceConfigappdb { @Bean(name = "appdbDataSource")
@ConfigurationProperties(prefix = "spring.datasource.appdb")
@Primary
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
} @Bean(name = "appdbSqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("appdbDataSource") DataSource dataSource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/appdb/*.xml"));
return bean.getObject();
} @Bean(name = "appdbTransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("appdbDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
} @Bean(name = "appdbSqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(
@Qualifier("appdbSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
} }
application.yml配置
spring:
datasource:
appdb:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://********:3306/******?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username: ********
password: ********
initialSize: 5
minIdle: 5
maxActive: 20
testWhileIdle: true
validationQuery: select 1
filters: stat,wall,log4j
就这样配置完了第一个数据源和mybatis。
第一个数据源由appdbTransactionManager来管理事务,在使用事务的时候用@Transactional(value = "appdbTransactionManager")注解来表明使用哪个事务管理器。
这里并未采用分布式事务管理器,分布式事务管理器是个大话题,如果你考虑分布式事务可以自己改造。
下面进行第二个数据源和mybatis的配置
package com.aaaaaaa.config.datasource; import javax.sql.DataSource; 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.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager; @Configuration
@MapperScan(basePackages = "com.aaaaaaa.mapper.testdb", sqlSessionTemplateRef = "testdbSqlSessionTemplate")
public class DataSourceConfigtestdb { @Bean(name = "testdbDataSource")
@ConfigurationProperties(prefix = "spring.datasource.testdb")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
} @Bean(name = "testdbSqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("testdbDataSource") DataSource dataSource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:mapper/testdb/*.xml"));
return bean.getObject();
} @Bean(name = "testdbTransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("testdbDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
} @Bean(name = "testdbSqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(
@Qualifier("testdbSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
} }
数据源2的配置
application.yml配置
spring:
datasource:
appdb:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://********:3306/******?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username: ********
password: ********
initialSize: 5
minIdle: 5
maxActive: 20
testWhileIdle: true
validationQuery: select 1
filters: stat,wall,log4j
testdb:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://********:3306/******?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username: ********
password: ********
initialSize: 5
minIdle: 5
maxActive: 20
testWhileIdle: true
validationQuery: select 1
filters: stat,wall,log4j
看一下两个数据源有哪些不同之处:
1:数据源2其实是由数据源1copy了一份代码,并将全部appdb改为testdb
2:此外数据源1有@Primary注解,而数据源2没有@Primary注解。使用@Primary注解是将数据源1作为默认数据源,并且多个数据源必须指定一个默认的数据源,否则会启动报错。
mybatis多数据源就是这么简单
springboot mybatis 多数据源配置的更多相关文章
- springboot mybatis 多数据源配置支持切换以及一些坑
一 添加每个数据源的config配置,单个直接默认,多个需要显示写出来 @Configuration @MapperScan(basePackages ="com.zhuzher.*.map ...
- springboot+ibatis 多数据源配置
这个是boot基本版本包,因为我用的打包方式是war所以去除掉了boot内置的tomcat,但是为了方便测试又引入了内置tomcat,只要添加<scope>provided</sco ...
- spring-boot (四) springboot+mybatis多数据源最简解决方案
学习文章来自:http://www.ityouknow.com/spring-boot.html 配置文件 pom包就不贴了比较简单该依赖的就依赖,主要是数据库这边的配置: mybatis.confi ...
- springboot + mybatis + 多数据源
此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源. 代码结构: 简要原理: 1) ...
- Spring Boot 2.X(五):MyBatis 多数据源配置
前言 MyBatis 多数据源配置,最近在项目建设中,需要在原有系统上扩展一个新的业务模块,特意将数据库分库,以便减少复杂度.本文直接以简单的代码示例,如何对 MyBatis 多数据源配置. 准备 创 ...
- springmvc+mybatis多数据源配置,AOP注解动态切换数据源
springmvc与springboot没多大区别,springboot一个jar包配置几乎包含了所有springmvc,也不需要繁琐的xml配置,springmvc需要配置多种jar包,需要繁琐的x ...
- MyBatis多数据源配置(读写分离)
原文:http://blog.csdn.net/isea533/article/details/46815385 MyBatis多数据源配置(读写分离) 首先说明,本文的配置使用的最直接的方式,实际用 ...
- 基于springboot的多数据源配置
发布时间:2018-12-11 技术:springboot1.5.1 + maven3.0.1+ mybatis-plus-boot-starter2.3.1 + dynamic-datasour ...
- SpringBoot 的多数据源配置
最近在项目开发中,需要为一个使用 MySQL 数据库的 SpringBoot 项目,新添加一个 PLSQL 数据库数据源,那么就需要进行 SpringBoot 的多数据源开发.代码很简单,下面是实现的 ...
随机推荐
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
最近一段时间不论互联网还是传统行业,凡是涉及信息技术范畴的圈子几乎都在讨论微服务架构.近期也看到各大技术社区开始组织一些沙龙和论坛来分享Spring Cloud的相关实施经验,这对于最近正在整理Spr ...
- 技术人应该学习的行话--UML统一建模语言
新生代码农如何在硝烟弥漫的商业丛林中生存和崛起? 洞见,让一部分先遇见未来. 最近公司技术部在组织架构师培训,有幸参与.导师老刘特别推荐了UML语言的学习.回想多年来,自己习惯做一些流程图,框图或者所 ...
- 开始记录学习java的笔记
今天开始记录学习java的笔记,加油
- 拾人牙慧篇之——基于HTML5中websocket来实现消息推送功能
一.写在前面 要求做一个,后台发布信息,前台能即时得到通知的消息推送功能.网上搜了也有很多方式,ajax的定时询问,Comet方式,Server-Sent方式,以及websocket.表示除了定时询问 ...
- POI导出excel并下载(以流的形式在客户端下载,不保存文件在服务器上)
import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; i ...
- SSH学习之路(一).Net开发与Java Web开发
摘要:一直再使用.net mvc5开发,期间学习过java web相关的知识,现如今想要进阶一下便开始学习ssh框架. 1..net web开发 对于微软的东西,开发者考虑的东西不需要太多,你新建一个 ...
- sqlilabs 1-4
near '1' --+ ' LIMIT 0,1 ?id=999' union select 1,database(),5 --+ 当前数据库?id=999' union select 1,user( ...
- git进阶
一.刚提交的代码,发现需要微调一下 刚刚最新提交了一段代码,然后跟前端说,接口好了.过了2分钟,前端跟你说,哎,兄弟,那个金额能不能返回整数,不要小数点. 这个时候一般我们通常会修改一下之后,再提交一 ...
- Maven学习(三)-- 使用Maven构建项目
摘自:http://www.cnblogs.com/xdp-gacl/p/4240930.html maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项 ...
- 高质量的内容是SEO的关键
内容是最有效的SEO策略,但也是最难执行的 正确的目录对SEO(搜索引擎优化:search engine optimization)关乎重大.根据Ascend2在2014年4月对全球营销专业人士做的调 ...