webentwicklung-frage-antwort-db.com.de

Wie man Kontext-Parameter im Spring-Boot einstellt

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.

22
dom farr

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
40
Andy Wilkinson

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:

http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/context/embedded/FilterRegistrationBean.html

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.

7

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);
}
1
Anton Bukatyj