springboot中怎么實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括德惠網(wǎng)站建設(shè)、德惠網(wǎng)站制作、德惠網(wǎng)頁(yè)制作以及德惠網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,德惠網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到德惠省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
/**
* 作用:保存一個(gè)線程安全的DatabaseType容器
*/
public class DatabaseContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal<>();
/**
* 當(dāng)需要操作數(shù)據(jù)庫(kù)前,也就是調(diào)用mapper.c/r/u/d方法前,可以調(diào)用該方法
* 該方法的作用是設(shè)置需要連接的數(shù)據(jù)庫(kù)
* 由于是線程安全,如果一個(gè)新的controller連接請(qǐng)求,在操作數(shù)據(jù)庫(kù)前沒有顯式的調(diào)用該方法,則get到的databaseType將會(huì)為null
* 但這并不影響數(shù)據(jù)庫(kù)的操作,因?yàn)樵跀?shù)據(jù)源的設(shè)置中已經(jīng)設(shè)置了默認(rèn)的數(shù)據(jù)源
* 當(dāng)在同一個(gè)線程中(也就是本系統(tǒng)controller的同一個(gè)請(qǐng)求處理中),如果該方法被調(diào)用過(guò)
* 則后面的數(shù)據(jù)庫(kù)操作,也就是mapper.c/r/u/d的時(shí),get到的都是set好的數(shù)據(jù)源,除非再次顯式的調(diào)用這個(gè)set方法改變數(shù)據(jù)源
*/
public static void setDatabaseType(String type) {
contextHolder.set(type);
}
/**
* 當(dāng)通過(guò)mapper.c/r/u/d方法等操作數(shù)據(jù)庫(kù)時(shí)
* 該方法會(huì)自動(dòng)被determineCurrentLookupKey方法調(diào)用到
* determineCurrentLookupKey是重寫了Spring里的AbstractRoutingDataSource類的determineCurrentLookupKey方法
*
* @see DynamicDataSource
*/
public static String getDatabaseType() {
return contextHolder.get();
}
}
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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.env.Environment;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
/**
* 數(shù)據(jù)源工具類
*/
@Configuration
@Slf4j
public class DataSourceUtil {
@Autowired
private Environment env;
//默認(rèn)數(shù)據(jù)源
private DataSource defaultDataSource;
//用戶自定義數(shù)據(jù)源
private Map slaveDataSources = new HashMap<>();
/**
* @see org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource
*/
@Bean
@Primary
public DynamicDataSource dataSource() throws Exception {
initDefaultDataSource();
initSlaveDataSources();
Map
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
文章題目:springboot中怎么實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源
網(wǎng)頁(yè)URL:
http://weahome.cn/article/jdpeps.html