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 的多数据源开发.代码很简单,下面是实现的 ...
随机推荐
- linux中安装程序及账户管理
程序安装及管理 1. Linux 应用程序基础 Linux命令与应用程序的关系 1):文件位置 系统命令:一般在/bin和/sbin目录中,或为Shell内部指令 应用程序:通常在/usr/bin和 ...
- erlang进程概述
一.概述 与大多数的进程相反,Erlang中的并发很廉价,派生出一个进程就跟面向对象的语言中分配一个对象的开销差不多. 在启动一个复杂的运算时,启动运算.派生进程以及返回结果后,所有进程神奇的烟消云散 ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第三周
一.逻辑回归问题(分类问题) 生活中存在着许多分类问题,如判断邮件是否为垃圾邮件:判断肿瘤是恶性还是良性等.机器学习中逻辑回归便是解决分类问题的一种方法.二分类:通常表示为yϵ{0,1},0:&quo ...
- c#学习笔记 day_one
C#学习笔记 day one Chapter 1 c#概述 1.1 c#概述 C#是微软设计的,简洁的,类型安全的,面向对象的语言.它以c/c++作为基础.它的开发环境是visual studio,最 ...
- Key-Value Store Indexer(Lily HBase Indexer) 小型采坑
环境: Cloudera Express 5.12.1 JDK 1.8.0_92 CentOS 7 步骤1:数据导入到Hbase中(非正题,跳过) hbase中表为allDoc,两个Family:fu ...
- 分布式爬虫框架XXL-CRAWLER
<分布式爬虫框架XXL-CRAWLER> 一.简介 1.1 概述 XXL-CRAWLER 是一个分布式爬虫框架.一行代码开发一个分布式爬虫,拥有"多线程.异步.IP动态代理.分布 ...
- python 要掌握面向对象,你得会做这些题吗?
1,面向对象三大特性,各有什么用处,说说你的理解. 继承:解决代码重用问题 多态:多态性,可以在不考虑对象类型的情况下而直接使用对象 封装:明确的区分内外,控制外部对隐藏属性的操作行为,隔离复杂度 2 ...
- 闲聊 “今日头条Go建千亿级微服务的实践”
背景 今天跟同事偶然看到<今日头条Go建千亿级微服务的实践>文章,故做了一些探讨,与大家分享下,也欢迎大家多多共同探讨!. 其他资料: 如何理解 Golang 中“不 ...
- java多线程对CountDownLatch的使用实例
介绍 CountDownLatch是一个同步辅助类,它允许一个或多个线程一直等待直到其他线程执行完毕才开始执行. 用给定的计数初始化CountDownLatch,其含义是要被等待执行完的线程个数. 每 ...
- PAT1003:Emergency
1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...