目录
一、简介
闲言碎语不多说:项目中要用到多数据源分别管理数据,主数据源存储正式数据,从数据源存储预加载的数据并完成预校验。
二、环境准备
eclipse + maven + Spring Boot + mybatis + oracle
三、代码改造
pom.xml文件中添加依赖
<!--alibaba连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.5</version>
</dependency>
application.properties文件中主从数据源配置
#====================================================================================
# 数据源配置
#====================================================================================
#数据源基础配置信息==============
datasource.base.poolPreparedStatements = false
datasource.base.type=com.alibaba.druid.pool.DruidDataSource
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
datasource.base.timeBetweenEvictionRunsMillis = 60000
#配置一个连接在池中最小生存的时间,单位是毫秒
datasource.base.minEvictableIdleTimeMillis = 30000
#检测查询
datasource.base.validationQuery = select 'x' FROM DUAL
datasource.base.testWhileIdle = true
datasource.base.testOnBorrow = false
datasource.base.testOnReturn = false
datasource.base.maxPoolPreparedStatementPerConnectionSize = 20
#配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
datasource.base.filters = stat,wall,slf4j
#主数据源==============================
#数据库地址
datasource.master.jdbcUrl=jdbc:oracle:thin:@192.168.10.111:1521:orcl
#数据库用户名
datasource.master.username=user1
#数据库密码
datasource.master.password=user1
#数据库驱动器
datasource.master.driver-class-name=oracle.jdbc.OracleDriver
#最大空闲连接: 连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放, 如果设置为负数表示不限制
datasource.master.max-idle=10
#最小空闲连接: 连接池中容许保持空闲状态的最小连接数量, 低于这个数量将创建新的连接, 如果设置为0 则不创建
datasource.master.min-idle=10
#最大等待时间: 当没有可用连接时, 连接池等待连接被归还的最大时间( 以毫秒计数), 超过时间则抛出异常, 如果设置为-1 表示无限等待
datasource.master.max-wait=10000
#连接池最大使用连接数量
datasource.master.max-active=300
#初始化连接: 连接池启动时创建的初始化连接数量
datasource.master.initial-size=50
#其它数据源==============================
#数据库地址
datasource.slave.jdbcUrl=jdbc:oracle:thin:@192.168.10.112:1521:orcl
#数据库用户名
datasource.slave.username=user2
#数据库密码
datasource.slave.password=user2
#数据库驱动器
datasource.slave.driver-class-name=oracle.jdbc.OracleDriver
#最小空闲连接: 连接池中容许保持空闲状态的最小连接数量, 低于这个数量将创建新的连接, 如果设置为0 则不创建
datasource.slave.min-idle=10
#最大等待时间: 当没有可用连接时, 连接池等待连接被归还的最大时间( 以毫秒计数), 超过时间则抛出异常, 如果设置为-1 表示无限等待
datasource.slave.max-wait=10000
#连接池最大使用连接数量
datasource.slave.max-active=300
#初始化连接: 连接池启动时创建的初始化连接数量
datasource.slave.initial-size=5
定义主从数据源枚举类DataSourceType.java
package service.db.datasource;
public enum DataSourceType {
// 主库
Master("master"),
// 从库
Slave("slave");
private String dSName;
private DataSourceType(String dSName) {
this.dSName = dSName;
}
public String getDsName() {
return dSName;
}
public void setDsName(String dSName) {
this.dSName = dSName;
}
}
读取application.properties中的配置信息,初始化主从数据源DynamicDataSourceRegister.java
package service.db.datasource;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.PropertyValues;
impo