In der klassischen Konfiguration des Typs web.xml können Sie Kontextparameter wie folgt konfigurieren
web.xml
...
<context-param>
<param-name>p-name</param-name>
<param-value>-value</param-value>
</context-param>
...
Wie wird das im Spring-Boot erreicht? Ich habe einen Filter, der Parameter erfordert.
Ich verwende @EnableAutoConfiguration
Und habe <artifactId>spring-boot-starter-jetty</artifactId>
In meinen POM aufgenommen.
Sie können Parameter für das gesamte ServletContext
festlegen, indem Sie eine ServletContextInitializer
-Bean deklarieren:
@Bean
public ServletContextInitializer initializer() {
return new ServletContextInitializer() {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("p-name", "-value");
}
};
}
pdate: In Spring Boot 1.2 ist die Verwendung von ServletContextInitializer
nicht mehr erforderlich. Sie können jetzt einen Parameter für ServletContext
in einer einzelnen Zeile in application.properties
Konfigurieren:
server.context_parameters.p-name=-value
Sie können dies tatsächlich mit Java config. Wenn Sie einen Filter haben, der einige Parameter erfordert, fügen Sie diese einfach in Ihre application.yml (oder .properties) ein und fügen Sie sie mit @Value
Ein. in deiner Konfigurationsklasse und registriere sie in FilterRegistrationBean
.
Beispielsweise:
@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;
}
Auch JavaDoc für FilterRegistrationBean
:
Update
Sie können Parameter für den Servlet-Kontext in der SpringBootServletInitializer#onStartup()
-Methode registrieren. Ihre Application-Klasse kann das SpringBootServletInitializer
erweitern, und Sie können die onStartup
-Methode überschreiben und die Parameter dort festlegen. Beispiel:
@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);
}
}
Eine andere Alternative besteht darin, ServletContextInitializer
bean wie von Andy Wilkinson vorgeschlagen zu definieren.
Sie können auch InitParameterConfiguringServletContextInitializer in Ihrer Konfiguration definieren. Beispiel:
@Bean
public InitParameterConfiguringServletContextInitializer initParamsInitializer() {
Map<String, String> contextParams = new HashMap<>();
contextParams.put("p-name", "-value");
return new InitParameterConfiguringServletContextInitializer(contextParams);
}