如何将自定义ApplicationContextInitializer添加到Spring Boot应用程序中?

问题描述 投票:0回答:3

将自定义 ApplicationContextInitializer 添加到 Spring Web 应用程序的一种方法是将其添加到 web.xml 文件中,如下所示。

<context-param>
    <param-name>contextInitializerClasses</param-name>
    <param-value>somepackage.CustomApplicationContextInitializer</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

但是由于我使用的是 Spring Boot,有什么方法我不必创建 web.xml 只是为了添加 CustomApplicationContextInitializer?

spring spring-boot
3个回答
54
投票

您可以在

META-INF/spring.factories

注册它们
org.springframework.context.ApplicationContextInitializer=\
com.example.YourInitializer

您也可以在运行之前将它们添加到您的

SpringApplication

application.addInitializers(YourInitializer.class);
application.run(args);

或者在构建器上

new SpringApplicationBuilder(YourApp.class)
    .initializers(YourInitializer.class);
    .run(args);

乍一看文档并不明显,所以我打开 #5091 进行检查。


25
投票

另一种方法是在properties/yml 文件中使用

context.initializer.classes=com.example.YourInitializer
。我喜欢这种方法,因为这样您就可以通过环境特定的 props 文件启用/禁用初始化程序。

仅在 spring boot 文档

中简要提及

1
投票

另一种选择是在类级别使用 @ContextConfiguration 注释,如下所示:

@ContextConfiguration(initializers = [TestContainersInitializer::class])

这种方法对于将此初始值设定项添加到测试类很有用,例如在执行测试之前启动 docker 容器。

© www.soinside.com 2019 - 2024. All rights reserved.