SpringBoot中mybatis配置多数据源
首先需要创建多个数据库
简单的user表
CREATE TABLE `user` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`age` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
导入项目依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
application.properties
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.one.username=root
spring.datasource.one.password=feng10.10
spring.datasource.one.url=jdbc:mysql://localhost:3306/m_1?characterEncoding=utf8&serverTimezone=UTCspring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.username=root
spring.datasource.two.password=feng10.10
spring.datasource.two.url=jdbc:mysql://localhost:3306/m_2?characterEncoding=utf8&serverTimezone=UTC# 多数据源配置时,mybatis这里设置的配置是不生效的!!
#mybatis.mapper-locations=classpath*:/mapper1/*.xml, classpath*:/mapper2/*.xml
#mybatis.type-aliases-package=com.zlf.mybatisDemo.domain
手动配置数据源
DataSourceConfig.java
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;/*** 配置多数据源*/
@Configuration
public class DataSourceConfig {//将配置文件中对应的属性注入改数据源中@ConfigurationProperties("spring.datasource.one")@BeanDataSource dsOne(){return DruidDataSourceBuilder.create().build();}//将配置文件中对应的属性注入改数据源中@ConfigurationProperties("spring.datasource.two")@BeanDataSource dsTwo(){return DruidDataSourceBuilder.create().build();}
}
手动配置myBatis配置
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import javax.annotation.Resource;
import javax.sql.DataSource;/*** 配置myBaits配置 1* 在@MapperScan注解中指定Mapper接口所在的位直, 同时指定SqlSessionFactory的实例名, 则该位置下的 Mapper将使用 SqlSessionFactory 实例。* 提供 SqlSessionFactory 的实例, 直接创建出来, 同时将 DataSource 的实例设置给 SqlSessionFactory,* 这里创建的 SqlSessionFactory 实例也就是@MapperScan 注解中 sqlSessionFactoryRef参数指定的实例 。*/
@Configuration
@MapperScan(value = "com.zlf.mybatisDemo.mapper1",sqlSessionFactoryRef = "sqlSessionFactoryBean1")
public class MyBatisConfigOne {@Resource(name = "dsOne")DataSource dataSource;/*** 提供 SqlSessionFactory 的实例, 直接创建出来, 同时将 DataSource 的实例设置给 SqlSessionFactory,* 这里创建的 SqlSessionFactory 实例也就是@MapperScan 注解中 sqlSessionFactoryRef参数指定的实例 。* @return* @throws Exception*/@BeanSqlSessionFactory sqlSessionFactoryBean1() throws Exception{SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource);// 需要手动设置mapper文件的路径factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper1/*.xml"));return factoryBean.getObject();}/*** 提供一个 SqlSessionTemplate 实例。 这是一个线程安全类,主要用来管理 MyBatis 中的 SqlSession 操作。* @return* @throws Exception*/@BeanSqlSessionTemplate sqlSessionTemplate1() throws Exception{return new SqlSessionTemplate(sqlSessionFactoryBean1());}}
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.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import javax.annotation.Resource;
import javax.sql.DataSource;/*** 配置myBaits配置 2* 在@MapperScan注解中指定Mapper接口所在的位直, 同时指定SqlSessionFactory的实例名, 则该位置下的 Mapper将使用 SqlSessionFactory 实例。* 提供 SqlSessionFactory 的实例, 直接创建出来, 同时将 DataSource 的实例设置给 SqlSessionFactory,* 这里创建的 SqlSessionFactory 实例也就是@MapperScan 注解中 sqlSessionFactoryRef参数指定的实例 。*/
@Configuration
@MapperScan(value = "com.zlf.mybatisDemo.mapper2",sqlSessionFactoryRef = "sqlSessionFactoryBean2")
public class MyBatisConfigTwo {@Resource(name = "dsTwo")DataSource dataSource;/*** 提供 SqlSessionFactory 的实例, 直接创建出来, 同时将 DataSource 的实例设置给 SqlSessionFactory,* 这里创建的 SqlSessionFactory 实例也就是@MapperScan 注解中 sqlSessionFactoryRef参数指定的实例 。* @return* @throws Exception*/@BeanSqlSessionFactory sqlSessionFactoryBean2() throws Exception{SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);// 需要手动设置mapper文件的路径sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper2/*.xml"));return sqlSessionFactoryBean.getObject();}/*** 提供一个 SqlSessionTemplate 实例。 这是一个线程安全类,主要用来管理 MyBatis 中的 SqlSession 操作。* @return* @throws Exception*/@BeanSqlSessionTemplate sqlSessionTemplate2() throws Exception {return new SqlSessionTemplate(sqlSessionFactoryBean2());}}
项目结构
启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication//@MapperScan(basePackages = {"com.zlf.mybatisDemo.mapper1","com.zlf.mybatisDemo.mapper2"}) 已经在配置类中设置了
public class MybatisDemoApplication {public static void main(String[] args) {SpringApplication.run(MybatisDemoApplication.class, args);}}
测试结果
测试类
import com.zlf.mybatisDemo.domain.User;
import com.zlf.mybatisDemo.mapper1.userMapper1;
import com.zlf.mybatisDemo.mapper2.userMapper2;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
class MybatisDemoApplicationTests {@AutowireduserMapper1 userMapper1;@AutowireduserMapper2 userMapper2;@Testvoid TestMybatis(){List<User> users1 = userMapper1.findAll();List<User> users2 = userMapper2.findAll();System.out.println("第一个数据源:m_1");System.out.println(users1);System.out.println("第二个数据源:m_2");System.out.println(users2);}}
SpringBoot中mybatis配置多数据源相关推荐
- 基于springboot和mybatis的多数据源配置
基于springboot和mybatis的多数据源配置 1.首先新建一个springboot项目,项目结构如下: 引入mybatis和mysql依赖: <dependency><gr ...
- springboot 中 mybatis configuration 配置失效问题
springboot 中 mybatis configuration 配置失效问题 环境 场景 springboot角度分析 SqlSessionFactory 设置Configuration Myb ...
- springboot 项目输出 sql 到控制台、 SpringBoot 中 Mybatis 打印 sql
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. SpringBoot中Mybatis打印sql 如果使用的是 application.propert ...
- SpringBoot中如何配置使用过滤器(Filter)呢?
转自: SpringBoot中如何配置使用过滤器(Filter)呢? 下文笔者讲述springboot中配置过滤器的方法分享,如下所示 实现思路:1.定义filter2.将filter注册进sprin ...
- springboot中@Configuration配置类加载流程
springboot中@Configuration配置类加载流程 代码位置 源码解读 每一步的分析 代码位置 ConfigurationClassParser#doProcessConfigurati ...
- 32位数据源中没有mysql_[SpringBoot实战]快速配置多数据源(整合MyBatis)
前言 由于业务需求,需要同时在SpringBoot中配置两套数据源(连接两个数据库),要求能做到service层在调用各数据库表的mapper时能够自动切换数据源,也就是mapper自动访问正确的数据 ...
- Springboot环境下mybatis配置多数据源配置
mybatis多数据源配置(本文示例为两个),方便实现数据库的读写分离,分库分表功能 本文基于springboot2进行的配置,如版本为springboot1系列则需修改yml的配置(在文末附带) m ...
- mybatis多数据源配置_随笔:springboot+mybatis 配置双数据源
山石彦 | 作者 urlify.cn/vQzIne | 来源 最近工作中有用到双数据源,一个项目(中台)中需要操作两个不同的数据库.当时考虑到了两种方式, 1.通过http请求访问(A项目访问d1数据 ...
- Mybatis在Spring-boot中自动配置的底层源码分析
前言:在Spring-boot结合Mybatis,我们只需要配置一些数据库连接的基本信息,写好Mapper和Dto就可以跑起来了.但是它是如何帮我们完成自动配置,并且执行我们的sql语句的呢?我们一起 ...
最新文章
- hibernate 多对多(many-to-many)
- 口语学习Day6:今天聊聊国内安全还是国外安全?
- Python类三种方法,函数传参,类与实例变量
- tensorboard 数据降维分布图_以mnist为例探究tensorboard
- PyTorch项目使用TensorboardX进行训练可视化
- hyperion高光谱参数_收藏!光纤光谱仪在激光领域的典型应用
- 在论坛中出现的各种疑难问题:日志收缩问题
- scala 字符串函数_Scala中的字符串chomp(或chop)函数
- Python异常处理 -跳过异常继续执行
- 军用装备产品GJB150A淋雨试验检测机构
- 算法大亨Carl的面试简历长啥样?同款模板让你脱胎换骨
- P2433 【深基1-2】小学数学 N 合一
- 基于SSM的Web网页聊天室系统
- 11210怎么等于24_算24点
- 跳马问题C++递归调用
- yy安全中心官网首页登录html,YY安全中心手机版
- 女程序员们的结婚要求
- LDA隐狄利克雷分配
- 收藏的一些前端酷炫网站
- 显示一张桌子的信息,包括桌子的形状(长方形、方形、圆形、椭圆形;使用Rect、Square、Circle、Ellipse)、腿数、高度、桌面面积。定义变量来保存桌子的信息,并显示各个信息的值。要点提示
热门文章
- onCreate源码分析
- snort的详细配置
- Kubernetes Master High Availability 高级实践
- java api项目配置统一的错误返回json提示
- [CareerCup] 8.10 Implement a Hash Table 实现一个哈希表
- switch(封装)
- 36岁自学C语言,C语言的数据类型
- python setup.py install 出错_python setup.py install 失败
- PLSQL Developer导入csv文件到oracle
- Zookeeper Watch监听