如何在spring-boot中设置context-param

时间:2014-10-29 19:57:15

标签: spring-mvc jetty 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中加入了<artifactId>spring-boot-starter-jetty</artifactId>

4 个答案:

答案 0 :(得分:38)

您可以通过声明ServletContext bean来设置整个ServletContextInitializer的参数:

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

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

更新:在Spring Boot 1.2中使用ServletContextInitializer不再需要。您现在可以在ServletContext中的一行中application.properties配置参数:

server.context_parameters.p-name=-value

答案 1 :(得分:7)

您可以使用Java配置实际实现此目的。如果你有需要一些参数的过滤器,只需将它们放在你的application.yml(或.properties)中,在你的config类中使用@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。

答案 2 :(得分:3)

从Spring Boot 2.0.0开始,他们更新了添加上下文参数的方法:

server.servlet.context-parameters.yourProperty.

您可以在此link

上看到更多更新

答案 3 :(得分:1)

您还可以在配置中定义InitParameterConfiguringServletContextInitializer。例如:

@Bean
public InitParameterConfiguringServletContextInitializer initParamsInitializer() {
    Map<String, String> contextParams = new HashMap<>();
    contextParams.put("p-name", "-value");
    return new InitParameterConfiguringServletContextInitializer(contextParams);
}