在经典的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>
。
答案 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:
<强>更新强>
您可以在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);
}