自己做的網(wǎng)站標(biāo)題青島網(wǎng)絡(luò)推廣公司排名
springboot啟動(dòng)忽略某些類
- 描述
- 解決方案
- 單拉一個(gè)提交,把所有的涉及kafka消費(fèi)的都不注入容器
- 通過(guò)配置@ComponentScan的excludeFilters
- 配置了不生效
- 后續(xù)處理
- 改之前
- 改之后
- 解釋
- 總結(jié)
- 拆分環(huán)境
- 感觸
- 解決實(shí)現(xiàn)demo
- 參考
描述
目前我這的開發(fā)環(huán)境和測(cè)試環(huán)境數(shù)據(jù)庫(kù)是兩份,但是其他如
kafka
、redis
、eureka
等等之類的,都是公用的。
這就會(huì)產(chǎn)生一個(gè)問(wèn)題,我想本地跑單元測(cè)試,但是kafka
消費(fèi)到了測(cè)試環(huán)境的數(shù)據(jù),然后異常重試又發(fā)送了延遲隊(duì)列(我這里的延遲隊(duì)列是基于kafka實(shí)現(xiàn)的),然后被測(cè)試環(huán)境消費(fèi)了,然后報(bào)警群里狂刷測(cè)試環(huán)境告警。
解決方案
單拉一個(gè)提交,把所有的涉及kafka消費(fèi)的都不注入容器
這個(gè)存在一些問(wèn)題:
1、第一次工作量有點(diǎn)大,我這項(xiàng)目有近20個(gè)消費(fèi),點(diǎn)的手有點(diǎn)累
2、自測(cè)的時(shí)候得convert
這個(gè)提交,好了之后再convert
,麻煩而且容易忘,忘了就是事故。。
通過(guò)配置@ComponentScan的excludeFilters
配置了不生效
@Configuration
@ComponentScan(
excludeFilters = {@ComponentScan.Filter(type = FilterType.REGEX, pattern = {"[.a-zA-Z]+InjectService"})
})
public class DevConfig {}
如上,單獨(dú)拉了一個(gè)配置類,指定了正則過(guò)濾,配置了正則表達(dá)式,然后,它沒(méi)起作用。報(bào)警群又刷了一遍。。
后面查了一下資料,說(shuō)是取交集。即使你這里沒(méi)有讓他掃描到,其他的@ComponentScan
掃描到了還是一樣。。于是,全局搜索,果然找到了
后續(xù)處理
一些指定掃描路徑不沖突的可以忽略,像
SpringfoxWebMvcConfiguration
、SwaggerCommonConfiguration
之類的。我這找到兩個(gè)關(guān)聯(lián)性的,一個(gè)是啟動(dòng)類上的包路徑掃描,另一個(gè)是基礎(chǔ)單元測(cè)試jar
包上寫死的路徑掃描。
交集,所以我得把掃描的匯總起來(lái)。單元測(cè)試的基本廢棄沒(méi)用了,直接把它排除了吧,如果要用的話只能通過(guò)復(fù)制類改掃描范圍了。啟動(dòng)類的話,我的處理方案是轉(zhuǎn)移到后面新拉的配置類上。
改之前
改之后
解釋
這里我讓啟動(dòng)類掃描指定文件夾,文件夾下只有我定義的配置,然后在從這個(gè)配置上讀取新的掃描包路徑,并且過(guò)濾指定類,如此,把所有的掃描都匯總了。至于上面說(shuō)的排除類,在配置一個(gè)過(guò)濾規(guī)則就好了,我就不寫了。本地沒(méi)用依賴那個(gè)jar包。。
總結(jié)
這種方案的完美解決了第一個(gè)的缺點(diǎn):
1、操作簡(jiǎn)單,不用在每個(gè)消費(fèi)者身上都改代碼,我的理解是功能聚合了。
2、不會(huì)出現(xiàn)事故,你第一次修改驗(yàn)證通過(guò)之后,后面可以修改.gitignore
文件,把這個(gè)類排除掉,這樣就不存在誤提交了。
注意,有個(gè)小坑哈,記得這個(gè)配置類別和你要排除的類放一起,不然啟動(dòng)類的路徑還是能掃描到的。。。我這里特地拉出一個(gè)單獨(dú)的目錄給它
拆分環(huán)境
一種方案是還是公用資源,但是走不同路徑,比如配置化用不同的
topic
。單服務(wù)還好,多服務(wù)得一起改。而且得看情況,像我這難得搞一次單元測(cè)試興師動(dòng)眾有點(diǎn)過(guò)分了
感觸
1、封裝基礎(chǔ)包的時(shí)候,最好限定好范圍。只處理能處理的,越精確越好。
2、基礎(chǔ)包代碼最好也有git
地址,可追溯修改。我這基礎(chǔ)包真就一個(gè)包了,沒(méi)法改。。
3、有可能的話,各個(gè)環(huán)境隔離
4、如果有其他好的方案,歡迎評(píng)論哈。
解決實(shí)現(xiàn)demo
參考實(shí)現(xiàn)
參考
componentscan-excludefilters-not-working-in-spring-4-0-6-release