Spring boot 連接多數(shù)據(jù)源過(guò)程詳解
1.application.yml中添加兩個(gè)datasource
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.手動(dòng)初始化數(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í)例化主庫(kù)");
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.手動(dòng)初始化數(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í)例化從庫(kù)");
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.測(cè)試啟動(dòng)是否正常初始化master和slave 兩個(gè)數(shù)據(jù)源
5.這里需要注意幾個(gè)地方:
- 配置數(shù)據(jù)庫(kù)連接池的時(shí)候,如果不是手動(dòng)設(shè)置HikariConfig ,即通過(guò)Environment 去一個(gè)個(gè)獲取數(shù)據(jù)庫(kù)連接池在yml中的配置的話,數(shù)據(jù)庫(kù)連接池的(idle-timeout,minimum-idle, maximum-pool-size,pool-name,auto-commit,connection-test-query)等,一定要與slave節(jié)點(diǎn)平級(jí),不然 HikariConfig 是讀取不到這些信息的。
- 如果手動(dòng)賦值HikariConfig 的話,那就沒(méi)有什么限制了,寫到哪里都行,只需要用Environment 去讀取配置文件的值,手動(dòng)設(shè)置到HikariConfig 就行了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringBoot 多數(shù)據(jù)源及事務(wù)解決方案小結(jié)
- springboot Jpa多數(shù)據(jù)源(不同庫(kù))配置過(guò)程
- Springboot如何設(shè)置多數(shù)據(jù)源,隨時(shí)切換
- SpringBoot中Druid連接池與多數(shù)據(jù)源切換的方法
- SpringBoot中實(shí)現(xiàn)多數(shù)據(jù)源連接和切換的方案
- Springboot2.0配置JPA多數(shù)據(jù)源連接兩個(gè)mysql數(shù)據(jù)庫(kù)方式
- Spring Boot實(shí)現(xiàn)多數(shù)據(jù)源連接和切換的解決方案
相關(guān)文章
Java虛擬機(jī)內(nèi)存溢出與內(nèi)存泄漏
這篇文章主要介紹了Java虛擬機(jī)內(nèi)存溢出與內(nèi)存泄漏,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Spring mvc Json處理實(shí)現(xiàn)流程代碼實(shí)例
這篇文章主要介紹了Spring mvc Json處理實(shí)現(xiàn)流程代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
spring?jpa設(shè)置多個(gè)主鍵遇到的小坑及解決
這篇文章主要介紹了spring?jpa設(shè)置多個(gè)主鍵遇到的小坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
spring boot+thymeleaf+bootstrap實(shí)現(xiàn)后臺(tái)管理系統(tǒng)界面
這篇文章主要為大家詳細(xì)介紹了spring boot+thymeleaf+bootstrap簡(jiǎn)單實(shí)現(xiàn)后臺(tái)管理系統(tǒng)界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
詳解使用Spring Boot開(kāi)發(fā)Web項(xiàng)目
這篇文章主要介紹了詳解使用Spring Boot開(kāi)發(fā)Web項(xiàng)目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04

