How to set context-param in spring-boot
Solution 1
You can set parameters on the whole ServletContext
by declaring a ServletContextInitializer
bean:
@Bean
public ServletContextInitializer initializer() {
return new ServletContextInitializer() {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("p-name", "-value");
}
};
}
Update: in Spring Boot 1.2 using a ServletContextInitializer
is no longer necessary. You can now configure a parameter on the ServletContext
in a single line in application.properties
:
server.context_parameters.p-name=-value
Solution 2
You can actually achieve this using Java config. If you have filter that requires some parameters, just put them in your application.yml (or .properties), inject them using @Value
in your config class and register them in FilterRegistrationBean
.
For example:
@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;
}
Also JavaDoc for FilterRegistrationBean
:
Update
You can register parameters for servlet context in SpringBootServletInitializer#onStartup()
method. Your Application class can extend the SpringBootServletInitializer
and you can override the onStartup
method and set the parameters there. Example:
@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);
}
}
Other alternative is to define ServletContextInitializer
bean as suggested by Andy Wilkinson.
Solution 3
Since Spring Boot 2.0.0 they updated the way to add context param:
server.servlet.context-parameters.yourProperty.
You can see more updates on this link
Solution 4
Also you can define InitParameterConfiguringServletContextInitializer in your configuration. Example:
@Bean
public InitParameterConfiguringServletContextInitializer initParamsInitializer() {
Map<String, String> contextParams = new HashMap<>();
contextParams.put("p-name", "-value");
return new InitParameterConfiguringServletContextInitializer(contextParams);
}
dom farr
Updated on July 10, 2022Comments
-
dom farr almost 2 years
In the classic web.xml type configuration you could configure context parameters like so
web.xml
... <context-param> <param-name>p-name</param-name> <param-value>-value</param-value> </context-param> ...
How is this achieved in spring-boot. I have a filter that requires parameters.
I'm using
@EnableAutoConfiguration
and have included<artifactId>spring-boot-starter-jetty</artifactId>
in my pom.