1.application.yml中添加兩個datasource
成都創(chuàng)新互聯(lián)云計算的互聯(lián)網(wǎng)服務(wù)提供商,擁有超過13年的服務(wù)器租用、西部信息中心、云服務(wù)器、網(wǎng)站空間、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗,已先后獲得國家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)許可證。專業(yè)提供云主機(jī)、網(wǎng)站空間、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
server:
port: 8080
spring:
application:
name: king
datasource:
master:
type: com.zaxxer.hikari.HikariDataSource
jdbc-url: jdbc:MySQL://localhost:3306/king?useUnicode=yes&characterEncoding=UTF-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
idle-timeout: 10000
minimum-idle: 1
maximum-pool-size: 10
pool-name: master
auto-commit: false
connection-test-query: SELECT 1
slave:
type: com.zaxxer.hikari.HikariDataSource
jdbc-url: jdbc:mysql://localhost:3306/king?useUnicode=yes&characterEncoding=UTF-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
idle-timeout: 10000
minimum-idle: 1
maximum-pool-size: 10
pool-name: slave
auto-commit: false
connection-test-query: SELECT 1
2.手動初始化數(shù)據(jù)源masterDataSource
package cn.bj.king.config;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
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 org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
/**
* @author ARongking
* @date 2019-03-28
*/
@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = {"cn.bj.king.mapper.master"},
sqlSessionFactoryRef = "masterSqlSessionFactory")
public class WriteDataSourceConfig {
@Bean(name = "masterDataSource")
@Primary
@Qualifier("masterDataSource")
public DataSource masterDataSource(@Qualifier("masterHikariConfig")HikariConfig hikariConfig) {
System.out.println("實(shí)例化主庫");
HikariDataSource hikariDataSource=new HikariDataSource(hikariConfig);
return hikariDataSource;
}
/**
* 配置連接池信息
* @return
*/
@ConfigurationProperties(prefix = "spring.datasource.master")
@Bean("masterHikariConfig")
public HikariConfig masterHikariConfig(){
HikariConfig hikariConfig=new HikariConfig();
return hikariConfig;
}
/**
* SqlSessionFactory配置
*
* @return
* @throws Exception
*/
@Bean(name = "masterSqlSessionFactory")
@Primary
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
// 配置mapper文件位置
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mapper/master/*.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("cn.bj.king.entity");
return sqlSessionFactoryBean.getObject();
}
/**
* 配置事物管理器
*
* @return
*/
@Bean(name = "masterTransactionManager")
@Primary
public DataSourceTransactionManager masterTransactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
dataSourceTransactionManager.setDataSource(dataSource);
return dataSourceTransactionManager;
}
}
3.手動初始化數(shù)據(jù)源ReadDataSource
package cn.bj.king.config;
import com.github.pagehelper.PageInterceptor;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
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.env.Environment;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
import java.util.Properties;
@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = {"cn.bj.king.mapper.slave"},
sqlSessionFactoryRef = "slaveSqlSessionFactory")
public class ReadDataSourceConfig {
@Autowired
Environment environment;
@Bean(name = "slaveDataSource")
@Qualifier("slaveDataSource")
public DataSource slaveDataSource(@Qualifier("slaveHikariConfig")HikariConfig hikariConfig) {
System.out.println("實(shí)例化從庫");
HikariDataSource hikariDataSource=new HikariDataSource(hikariConfig);
return hikariDataSource;
}
/**
* 配置連接池信息
* @return
*/
@ConfigurationProperties(prefix = "spring.datasource.slave")
@Bean("slaveHikariConfig")
public HikariConfig slaveHikariConfig(){
HikariConfig hikariConfig=new HikariConfig();
return hikariConfig;
}
/**
* SqlSessionFactory配置
*
* @return
* @throws Exception
*/
@Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
// 配置mapper文件位置
sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mapper/slave/*.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("cn.bj.king.entity");
return sqlSessionFactoryBean.getObject();
}
/**
* 配置事物管理器
*
* @return
*/
@Bean(name = "slaveTransactionManager")
public DataSourceTransactionManager slaveTransactionManager(@Qualifier("slaveDataSource") DataSource dataSource) {
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
dataSourceTransactionManager.setDataSource(dataSource);
return dataSourceTransactionManager;
}
}
4.測試啟動是否正常初始化master和slave 兩個數(shù)據(jù)源
5.這里需要注意幾個地方:
* 配置數(shù)據(jù)庫連接池的時候,如果不是手動設(shè)置HikariConfig ,即通過Environment 去一個個獲取數(shù)據(jù)庫連接池在yml中的配置的話,數(shù)據(jù)庫連接池的(idle-timeout,minimum-idle, maximum-pool-size,pool-name,auto-commit,connection-test-query)等,一定要與slave節(jié)點(diǎn)平級,不然 HikariConfig 是讀取不到這些信息的。
* 如果手動賦值HikariConfig 的話,那就沒有什么限制了,寫到哪里都行,只需要用Environment 去讀取配置文件的值,手動設(shè)置到HikariConfig 就行了。
文章標(biāo)題:Springboot連接多數(shù)據(jù)源
鏈接分享:http://chinadenli.net/article44/jiidhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、標(biāo)簽優(yōu)化、建站公司、云服務(wù)器、靜態(tài)網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)