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 ...
随机推荐
- Python 安装第三方模块时 报Retrying(Retry(total=4, connect=None, read=None, redirect=None, status=None))...[WinError 10061]由于目标计算机积极拒绝,无法连接 错误
今日在安装ddt模块时(Windows系统),cmd报了一个以前从未见过的错误,如下图所示: 经百度,知是镜像源的问题,将安装命令改成如下命令: pip install ddt -i https:// ...
- 华为云 Kubernetes 管理员实训 四 课后作业
练习一 创建一个Service和一个Pod作为其后端.通过kubectl describe获得该Service和对应Endpoints的信息. Service的名称为<hwcka-004-1-s ...
- Centos 修改环境变量
环境变量文件路径 添加一个X变量,在etc/profile 尾部添加 X=12345即可 输入命令 vim /etc/profile 变量生效 source /etc/profile 测试结果
- 经典变长指令-RegOpcode
一.回顾Mod/M结构 Intel 64 and IA-32 Architectures Instruction Format ModR/M结构图 Mod与R/M共同描述E的意义(内存或者通用寄存器) ...
- 《剑指offer》面试题66. 构建乘积数组
问题描述 给定一个数组 A[0,1,-,n-1],请构建一个数组 B[0,1,-,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×-×A[i-1]×A[i+1]×-×A[n-1].不能使用 ...
- 多线程的libcurl的使用
摘要:libcurl在多线程中,采用https访问,经常运行一段时间,会出现crash. libcurl的在多线程中的使用特别注意的有两点: 1. curl的句柄不能多线程共享. 2. ssl访问时, ...
- python闭包函数&装饰器
一.函数引用 函数可以被引用 函数可以被赋值给一个变量 def hogwarts(): print("hogwarts") # hogwarts() # 函数调用 print(ho ...
- dubbo系列一、dubbo启动流程
目录 dubbo启动流程分析记录 一.dubbo provider启动流程 1.自动装配 2.ServiceBean处理 3.服务暴露export() 3.1.检测dubbo.xxx.配置属性,配置到 ...
- a 标签一些特殊用法
发邮件 <a href="mailto:youemail@mail.com?subject=邮件标题&body=邮件内容">告诉我们</a> 打电话 ...
- Android Native -- Message/Handler/Looper机制(原理篇)
⌈Android Native消息队列处理系列文章⌋ Android Native -- Message/Handler/Looper机制(原理篇) Android Native -- Message ...