解決springboot環(huán)境切換失效的問題
springboot環(huán)境切換失效
概述
最近在使用-Dspring.profiles.active=te 來切換spring-boot的環(huán)境時(shí),發(fā)現(xiàn)日志打印的是:
...ApplicationStartUp - The following profiles are active: de
也就是說,參數(shù)失效了。
debug調(diào)試時(shí),發(fā)現(xiàn)spring-boot讀取的也是de,不是te。
解決
下載了一個(gè)新的tomcat,然后重新發(fā)布程序,設(shè)置參數(shù),啟動(dòng),發(fā)現(xiàn)環(huán)境正常切換了過來。
SpringBoot多數(shù)據(jù)源切換無效(不切換)
SpringBoot的多數(shù)據(jù)源實(shí)現(xiàn)以實(shí)現(xiàn)AbstractRoutingDataSource#determineCurrentLookupKey()來達(dá)到多個(gè)數(shù)據(jù)源動(dòng)態(tài)切換的目的。
網(wǎng)上有很多的文章可以獲取具體方法,就不在講了。
項(xiàng)目中需要用到多數(shù)據(jù)源MySQL和SQLServer兩個(gè)數(shù)據(jù)庫,系統(tǒng)要保持兩個(gè)數(shù)據(jù)庫的數(shù)據(jù)同步,就需要來回切數(shù)據(jù)源來操作數(shù)據(jù)庫。
剛寫好了數(shù)據(jù)從MySQL同步到SQLServer中的代碼,測(cè)試發(fā)現(xiàn)數(shù)據(jù)源不能切換到SQLServer數(shù)據(jù)庫連接,排查問題~~省略n多個(gè)小時(shí)后,
源碼解析等理論就不寫了(重要的是不會(huì)寫)直接上修改方案
CSDN查到的方案有
- 數(shù)據(jù)源切換和事務(wù)的注入順序問題,像下面這樣的,加入@Order注解。測(cè)試無效(可能我搭的架構(gòu)有問題)
@Aspect @Slf4j @Order(-1) // 保證優(yōu)先級(jí) @Component public class DatasourceAspect { @Pointcut("@within(DataSource)|| @annotation(DataSource)") public void pointcut() { } @Before("pointcut() && @annotation(dataSource)") public void before(DataSource dataSource) { DatasourceContextHolder.setDatasource(dataSource.value().getDbName()); } @After("pointcut()") public void after() { DatasourceContextHolder.clear(); } }
- Mapper(Dao)層切換數(shù)據(jù)源,反正我沒找到怎么個(gè)用法,所以沒有測(cè)試。
- 還有下面的這種寫法。測(cè)試有效的
@DataSource(DatasourceEnum.DB3) public int insertSelective( String hbNo, ) throws Exception{ CcpHeaderSqlServer record = new CcpHeaderSqlServer(); if (log.isDebugEnabled()) { log.debug("同步到SQLServer的數(shù)據(jù)對(duì)象:[{}]", record); } ...... // 這種調(diào)用保存數(shù)據(jù)的方法,有效切換數(shù)據(jù)源 XXXService service = SpringContextHolder.getBean(XXXService.class); return service.saveHeader(record); } @DataSource(DatasourceEnum.DB3) public int saveHeader(XXXEntity record) { return xxxMapper.insertSelective(record); }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入淺析springsecurity入門登錄授權(quán)
SpringSecurity為我們提供了基于注解的權(quán)限控制方案,這也是我們項(xiàng)目中主要采用的方式,我們可以使用注解去指定訪問對(duì)應(yīng)的資源所需的權(quán)限,這篇文章主要介紹了springsecurity入門登錄授權(quán),需要的朋友可以參考下2024-05-05Spring Cache與Redis結(jié)合的使用方式
這篇文章主要介紹了Spring Cache與Redis結(jié)合的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Java棧的應(yīng)用之括號(hào)匹配算法實(shí)例分析
這篇文章主要介紹了Java棧的應(yīng)用之括號(hào)匹配算法,結(jié)合實(shí)例形式分析了Java使用棧實(shí)現(xiàn)括號(hào)匹配算法的相關(guān)原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-03-03在SpringBoot中使用JWT的實(shí)現(xiàn)方法
這篇文章主要介紹了在SpringBoot中使用JWT的實(shí)現(xiàn)方法,詳細(xì)的介紹了什么是JWT和JWT實(shí)戰(zhàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12基于javamelody監(jiān)控springboot項(xiàng)目過程詳解
這篇文章主要介紹了基于javamelody監(jiān)控springboot項(xiàng)目過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11SpringBoot中優(yōu)化Undertow性能的方法總結(jié)
Undertow是一個(gè)采用 Java 開發(fā)的靈活的高性能Web服務(wù)器,提供包括阻塞和基于NIO的非堵塞機(jī)制,本文將給大家介紹SpringBoot中優(yōu)化Undertow性能的方法,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2024-08-08