如何在spring-boot中设置上下文参数

新手上路,请多包涵

在经典的 web.xml 类型配置中,您可以像这样配置上下文参数

web.xml

 ...
<context-param>
  <param-name>p-name</param-name>
  <param-value>-value</param-value>
</context-param>
...

这是如何在spring-boot中实现的。我有一个需要参数的过滤器。

我正在使用 @EnableAutoConfiguration 并在我的 pom.xml 中包含了 <artifactId>spring-boot-starter-jetty</artifactId>

原文由 dom farr 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您可以使用 server.servlet.context-parameters 应用程序属性设置参数。例如:

 server.servlet.context-parameters.p-name=p-value

在不再支持的 Spring Boot 1.x 中,此属性被命名为 server.context-parameters

 servlet.context-parameters=p-name=p-value

或者,您可以通过声明 ServletContextInitializer bean 以编程方式配置参数:

 @Bean
public ServletContextInitializer initializer() {
    return new ServletContextInitializer() {

        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            servletContext.setInitParameter("p-name", "-value");
        }
    };
}

原文由 Andy Wilkinson 发布,翻译遵循 CC BY-SA 4.0 许可协议

您实际上可以使用 Java 配置来实现这一点。如果您的过滤器需要一些参数,只需将它们放在您的 application.yml(或 .properties)中,使用 @Value 在您的配置类中注入它们,然后在 FilterRegistrationBean 中注册它们。

例如:

 @Value("${myFilterParam}")
private String myFilterParam;

@Bean(name="myFilter")
public FilterRegistrationBean myFilter() {
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter());
    filterRegistrationBean.setInitParameters(Collections.singletonMap("p-name", "p-value"));
    return filterRegistrationBean;
}

还有用于 FilterRegistrationBean 的 JavaDoc:

http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/context/embedded/FilterRegistrationBean.html

更新

您可以在 SpringBootServletInitializer#onStartup() 方法中注册 servlet 上下文的参数。您的 Application 类可以扩展 SpringBootServletInitializer 并且您可以覆盖 onStartup 方法并在那里设置参数。例子:

 @Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.setInitParameter("p-name", "p-value");
        super.onStartup(servletContext);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

}

其他替代方法是按照 Andy Wilkinson 的建议定义 ServletContextInitializer bean。

原文由 Bohuslav Burghardt 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进