SpringBootApplication的exclude不生效问题排查
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包内不应该有。