SpringBootApplication
的exclude不生效問題排查
背景
在ManApplication
上添加了SpringBootApplication
中配置了exclude={org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration.class}
但是在啓動過程了ElasticsearchAutoConfiguration
還是加載了,使用配置文件的方式就可以避免加載。
排查
首先懷疑是不是啓動的類加載了ElasticsearchAutoConfiguration
的初始化方法,查找無果。
於是想通過SpringBootApplication的啓動過程來排查。
SpringBootApplication的啓動入口是SpringApplication.run()
方法。
調用時序圖可以參考以下:
在debug的過程中發現還有其他的@EnableAutoConfiguration
註解,更直白的說是jar包存在類中@SpringBootApplication
沒有exclude. 從EnableAutoConfigurationImportSelector
類可以看到getExclusions
的邏輯正好解釋了這一現象。
另外從註解可以直接達到,以後有關@…AutoConfiguration的應該找註解上的
@Import
註解中的解析類,可以直達解析邏輯。
結論
- 使用配置的方式進行exclude
- 推動包含
@EnableAutoConfiguration
的去掉,因爲jar包內不應該有。