Spring Druid多数据源配置
SpringBoot 多数据源配置
如果需要在一个应用中使用多个数据源,应当如何实现呢,在Spring配置MyBatis中,我们可以看到以下的代码
<!-- mybatis 的SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" scope="prototype">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
MyBatis的一个SqlSession即代表了一个数据源的配置,所以要实现多个数据源的,配置多个不同的SqlSession就行
依赖引入
<dependencies>
<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.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies>
依赖中引入了mybatis,mysql驱动和druid连接池
配置SqlSession
首先在应用配置文件中添加数据源的相关配置
spring:
datasource:
druid:
# 数据库访问配置, 使用druid数据源
# 数据源1 mysql
mysql1:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC
username: root
password: ranger
# 数据源2 oracle
mysql2:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC
username: root
password: ranger
在这里配置了两个数据源
然后分别配置两个SqlSession
/**
* @Author ranger
* @Date 2019/12/5 23:47
* MySQL1数据源配置
**/
@Configuration
@MapperScan(basePackages = "com.ranger.datasource.mysqlDao", sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MySQLSqlSessionConfig {
@Primary
@Bean(name = "mysqldatasource")
@ConfigurationProperties("spring.datasource.druid.mysql1")
public DataSource mysqlDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "mysqlTransactionManager")
@Primary
public DataSourceTransactionManager mysqlTransactionManager() {
return new DataSourceTransactionManager(mysqlDataSource());
}
@Bean(name = "mysqlSqlSessionFactory")
@Primary
public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqldatasource") DataSource dataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
//如果不使用xml的方式配置mapper,则可以省去下面这行mapper location的配置。
// sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
// .getResources("classpath:mapper/mysql/*.xml"));
return sessionFactory.getObject();
}
}
/**
* @Author ranger
* @Date 2019/12/5 23:53
* MySQL2数据源配置
**/
@Configuration
@MapperScan(basePackages = "com.ranger.datasource.otherDao", sqlSessionFactoryRef = "otherSqlSessionFactory")
public class OtherSqlSessionConfig {
@Bean(name = "otherdatasource")
@ConfigurationProperties("spring.datasource.druid.mysql2")
public DataSource mysqlDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "otherTransactionManager")
public DataSourceTransactionManager mysqlTransactionManager() {
return new DataSourceTransactionManager(mysqlDataSource());
}
@Bean(name = "otherSqlSessionFactory")
public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("otherdatasource") DataSource dataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
//如果不使用xml的方式配置mapper,则可以省去下面这行mapper location的配置。
// sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
// .getResources("classpath:mapper/other/*.xml"));
return sessionFactory.getObject();
}
}
两个数据源分别配置了不同的Mapper路径
测试
创建一个User实体和UserController来测试数据源是否可以正常使用
@Controller
@RequestMapping("user")
public class UserController {
// 引入MySQL的配置
@Autowired
private MysqlUserDao mysqlUserDao;
@Autowired
private OtherUserDao otherUserDao;
@ResponseBody
@RequestMapping("all/mysql")
public List<User> getAll(){
return mysqlUserDao.selectAll();
}
@ResponseBody
@RequestMapping("all/other")
public List<User> getAllOther(){
return otherUserDao.selectAll();
}
}
浏览器访问http://localhost:8080/user/all/mysql和http://localhost:8080/user/all/other可以看到不同的返回结果


这样就实现了多数据源,不同的Dao使用不同的数据源
Spring Druid多数据源配置的更多相关文章
- (七)spring+druid多数据源配置
druid多数据源配置 一.druid简介 Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. ...
- Druid动态数据源配置
上文已经讲了单个数据源的Druid的配置(http://www.cnblogs.com/nbfujx/p/7686634.html) Druid动态数据源配置 主要是继承AbstractRouting ...
- spring mysql多数据源配置
spring mysql多数据源配置 @Configuration public class QuartzConfig { @Autowired private AutowireJobFactory ...
- Java spring mvc多数据源配置
1.首先配置两个数据库<bean id="dataSourceA" class="org.apache.commons.dbcp.BasicDataSource&q ...
- Spring Boot多数据源配置(二)MongoDB
在Spring Boot多数据源配置(一)durid.mysql.jpa 整合中已经讲过了Spring Boot如何配置mysql多数据源.本篇文章讲一下Spring Boot如何配置mongoDB多 ...
- Spring实现多数据源配置
一.前言 对于小型项目,服务器与数据库是可以在同一台机子上的,但随着业务的庞大与负责,数据库和服务器就会分离开来.同时随着数据量的增大,数据库也要分开部署到多台机子上. 二.Spring配置文件修改 ...
- spring boot +mybatis+druid 多数据源配置
因为我的工程需要在两个数据库中操作数据,所以要配置两个数据库,我这里没有数据源没有什么主从之分,只是配合多数据源必须要指定一个主数据源,所以我就把 操作相对要对的那个数据库设置为主数据(dataBas ...
- JAVA spring hibernate 多数据源配置记录
数据源配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...
- spring boot(12)-数据源配置原理
本篇讲的不仅是数据源配置,这也是spring boot实现自动配置的一部分.要理解数据源的配置原理,首先要理解第十篇tomcat连接池的配置 数据源配置源码 这里截取org.springframewo ...
随机推荐
- kubeadm 安装Kubernetes 1.16.3 (CentOS7+IPVS+Calico)
目录 · . 一.更新系统内核(全部节点) · . 二.基础环境设置(全部节点) · . 1.修改 Host · . 2.修改 Hostname · . 3.主机时间同步 · . 4.关闭 ...
- 《剑指offer》面试题25. 合并两个排序的链表
问题描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2-> ...
- 《剑指offer》面试题62. 圆圈中最后剩下的数字
问题描述 0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 例如,0.1.2.3.4这5个数字组成一个圆圈,从数字0开始每次删除第 ...
- Kubernetes&Docker集群部署
集群环境搭建 搭建kubernetes的集群环境 环境规划 集群类型 kubernetes集群大体上分为两类:一主多从和多主多从. 一主多从:一台Master节点和多台Node节点,搭建简单,但是有单 ...
- 【小记录】利用cuvid库做视频解码,运行出现"dlopen "libnvcuvid.so" failed!"
1.查看源码:/Video_Codec_SDK_8.0.14/Samples/common/src/dynlink_nvcuvid.cpp 其中的LOAD_LIBRARY函数的源码如下: 1 #eli ...
- 微服务架构 | 12.1 使用 Apache Dubbo 实现远程通信
目录 前言 1. Dubbo 基础知识 1.1 Dubbo 是什么 1.2 Dubbo 的架构图 1.3 Spring Cloud 与 Dubbo 的区别 1.4 Dubbo 的特点 1.5 Dubb ...
- Spring Boot Starter 和 ABP Module
Spring Boot 和 ABP 都是模块化的系统,分别是Java 和.NET 可以对比的框架.模块系统是就像乐高玩具一样,一块一块零散积木堆积起一个精彩的世界.每种积木的形状各不相同,功能各不相同 ...
- Go 变量及基本数据类型1
#### Go 变量及基本数据类型(一)今天主要学习一下Go 中的变量及基本数据类型: 如何申明,使用变量,以及基本数据类型的介绍和使用细节; ##### 变量的介绍1. 变量相当于内存中一个数据存储 ...
- Nginx代理的方式(反向代理)
目录 一:Nginx 正向代理与反向代理 1.什么是代理服务器? 2.正向代理的概念 3. 反向代理的概念 二:Nginx代理服务支持的协议 三:Nginx代理实践 1.部署web01 2.部署lb0 ...
- TF-IDF计算相似度为什么要对稀疏向量建立索引?
TF-IDF的向量表示的稀疏问题 之前在看tf-idf代码时候思考了一个问题,不知道对于初学的大部分同学有没有这样一个疑惑,用tf-idf值构成的向量,维度可能跟词表的大小有关,那么对于一句话来说,这 ...