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

dom*_*arr 22 jetty spring-mvc spring-boot

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

web.xml中

...
<context-param>
  <param-name>p-name</param-name>
  <param-value>-value</param-value>
</context-param>
...
Run Code Online (Sandbox Code Playgroud)

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

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

And*_*son 41

您可以ServletContext通过声明ServletContextInitializerbean 来设置参数:

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

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

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

server.context_parameters.p-name=-value
Run Code Online (Sandbox Code Playgroud)


Boh*_*rdt 7

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

JavaDoc也适用于FilterRegistrationBean:

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

另一种选择是ServletContextInitializer根据Andy Wilkinson的建议定义bean.


小智 5

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

server.servlet.context-parameters.yourProperty.
Run Code Online (Sandbox Code Playgroud)

您可以在此链接上查看更多更新