【发布时间】:2021-08-31 15:20:53
【问题描述】:
我有以下自动配置的类,列在EnableAutoConfiguration 下的spring.factories 中,并打包为公共库:
@Configuration
public class GracefulShutdownConfig {
@Bean
public GracefulShutdown gracefulShutdown() {
return new GracefulShutdown();
}
@Bean
public WebServerFactory webServerFactory(final GracefulShutdown gracefulShutdown) {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers(gracefulShutdown);
return factory;
}
}
当作为 jar 库导入时,bean 初始化太晚,此时 TomcatServletWebServerFactory 已经启动了 Tomcat,添加了 connectorCustomizers 并向它们注入了 Connector。
因此,GracefulShutdown 类没有收到它的Connector 并抛出 NullPointerException。
我已阅读 solutions 关于如何在自动配置的类中优先考虑自动配置的类,但在我的情况下,我希望我的自动配置类的 bean 在 Spring Boot 本身启动时优先加载,因为 bean 与其他外部注入的 bean 无关或不依赖。有人可以帮忙吗?
【问题讨论】:
-
@AutoConfigureBefore似乎正是您在这里所需要的(尽管我也希望确认默认引导行为不会应用您的自定义程序,如果您只是将其注册为 bean;这是一种相当常见的模式)。 -
我将这个添加到我的配置类中:@AutoConfigureOrder(-2147483648) @AutoConfigureBefore({ServletWebServerFactoryAutoConfiguration.class, EmbeddedWebServerFactoryCustomizerAutoConfiguration.class}) 但是,仍然没有效果。
标签: java spring spring-boot