一、前言
目前SpringBoot的版本已经是2.2.2了,2.0以后的版本就已经默认使用hikari作为连接池了。因此整合hikari也变得十分简单了,下面介绍一下在2.0以后的SpringBoot版本中如何配置一Mysql数据源和Oracle数据源。
二、配置文件
application.yml文件 如下
spring:
datasource: #数据源
hikari:
# 第一个Mysql数据源配置
master:
jdbc-url: jdbc:mysql://127.0.0.1:3306/test1?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 123456
# Spring Boot已经换新的啦
# driverClassName: com.mysql.jdbc.Driver
driverClassName: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
# 连接池中维护的最小空闲连接数
minimum-idle: 5
# 配置最大池大小
maximum-pool-size: 15
# 配置从池返回的连接的默认自动提交行为。默认值为true。
auto-commit: true
# 允许连接在连接池中空闲的最长时间(以毫秒为单位)
idle-timeout: 30000
# 连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置
pool-name: HikariDataPool
# 池中连接关闭后的最长生命周期(以毫秒为单位)
max-lifetime: 1800000
# 客户端等待连接池连接的最大毫秒数
connection-timeout: 30000
# 测试连接
connection-test-query: select 1 from dual
# 第二个Oracle数据源
core:
jdbc-url: jdbc:oracle:thin:@127.0.0.1:1521:test2
username: root
password: 123456
driverClassName: oracle.jdbc.OracleDriver
type: com.zaxxer.hikari.HikariDataSource
minimum-idle: 5
maximum-pool-size: 15
max-lifetime: 1800000
idle-timeout: 30000
connection-timeout: 30000
pool-name: HikariDataPoolOracle
connection-test-query: select 1 from dual
三、配置类
1)Oracle数据源配置类
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.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.zlc.springcloud.repository.*.coresystem", sqlSessionFactoryRef = "coreSqlSessionFactory")
public class CoreDataSourceConfig {
@Bean(name = "coreDataSource")
@ConfigurationProperties(prefix = "spring.datasource.hikari.core")
public DataSource getCoreDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "coreSqlSessionFactory")
public SqlSessionFactory coreSqlSessionFactory(@Qualifier("coreDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
//xml位置
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/**/coresystem/*.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "coreSqlSessionTemplate")
public SqlSessionTemplate coreSqlSessionTemplate(@Qualifier("coreSqlSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
2)Mysql数据源配置类
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.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
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;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.zlc.springcloud.repository.*.master", sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
@Bean(name = "masterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.hikari.master")
public DataSource getMasterDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
//xml位置
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/**/master/*.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "masterSqlSessionTemplate")
public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean(name = "MasterTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("masterDataSource")DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
三、主要注意点
1)@MapperScan(basePackages = “com.zlc.springcloud.repository.*.coresystem”, sqlSessionFactoryRef = “coreSqlSessionFactory”)
这个是设置Repository所在的位置,代表repository包下的所有coresystem包下的所有文件
2) @ConfigurationProperties(prefix = “spring.datasource.hikari.core”)
这里是读取application.yml文件中core节点下的所有东西,一定要对应行,如果自己取了别的名字,记得更换一下
3)Mybatis的xml文件位置要配置一下,和自己的对应
//xml位置
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/**/coresystem/*.xml"));
以上就是最需要注意的地方,移植的时候注意对应上。