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 的多数据源开发.代码很简单,下面是实现的 ...
随机推荐
- 安装VirtualBox后 不能选择64bit的系统
之前在台式机上安装VirtualBox,一切OK,能够安装64位的任何版本iso包今天在hp笔记本上安装,安装VirtualBox完毕后,只能选择32位的iso版本. 而我目前只有一个linux64b ...
- IDEA 下新建 Hibernate 项目
Hibernate 概述 什么是 Hibernate 一个 Java 领域的持久化框架 一个 Java 领域的ORM 框架 什么是持久化 持久化是指把对象永久保存到数据库中 持久化包括和数据库相关的各 ...
- Spring security在MS-SQL下的初始化脚本
-- create table users( -- username nvarchar(50) not null primary key, -- password nvarchar(50) not n ...
- nginx flv点播服务器搭建
首先选用Nginx+Nginx-rtmp-module作为点播服务器,安装文章:https://www.atlantic.NET/community/howto/install-rtmp-ubuntu ...
- 关于在IJ中使用maven projects 的Lifecycle中打包package报expected START_TAG or END_TAG not TEXT
报错指定到maven本地仓库下的settings.xml某一行,如下列JDK配置: <profiles> <profile> <id>jdk-1.8</ ...
- 网站内容禁止复制和粘贴、另存为的js代码
1.使右键和复制失效 方法1: 在网页中加入以下代码: 复制代码代码如下: <script language="Javascript"> document.oncont ...
- (转)java之Spring(IOC)注解装配Bean详解
java之Spring(IOC)注解装配Bean详解 在这里我们要详细说明一下利用Annotation-注解来装配Bean. 因为如果你学会了注解,你就再也不愿意去手动配置xml文件了,下面就看看 ...
- Mac下MySQL无my-default.cnf
转自https://www.jianshu.com/p/628bcf8bb557 As of MySQL 5.7.18, my-default.ini is no longer included in ...
- C++ 文件流的详解
部分内容转载:http://blog.csdn.net/kingstar158/article/details/6859379 感谢追求执着,原本想自己写,却发现了这么明白的文章. C++文件流操作是 ...
- 并发编程(十):AQS
AQS全称为AbstractQueuedSynchronizer,是并发容器中的同步器,AQS是J.U.C的核心,它是抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类都 ...