Как установить context-param в spring -boot
В классической конфигурации типа web.xml вы можете настроить такие параметры контекста, как
web.xml
...
<context-param>
<param-name>p-name</param-name>
<param-value>-value</param-value>
</context-param>
...
Как это достигается в spring -boot. У меня есть фильтр, который требует параметров.
Я использую @EnableAutoConfiguration
и включил <artifactId>spring-boot-starter-jetty</artifactId>
в мой pom.
Ответы
Ответ 1
Вы можете установить параметры в целом ServletContext
, объявив ServletContextInitializer
bean:
@Bean
public ServletContextInitializer initializer() {
return new ServletContextInitializer() {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("p-name", "-value");
}
};
}
Обновить: в Spring Загрузка 1.2 с помощью ServletContextInitializer
больше не требуется. Теперь вы можете настроить параметр на ServletContext
в одной строке в application.properties
:
server.context_parameters.p-name=-value
Ответ 2
Фактически вы можете добиться этого, используя конфигурацию Java. Если у вас есть фильтр, требующий некоторых параметров, просто поместите их в свой application.yml(или .properties), добавьте их с помощью @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;
}
Также JavaDoc для FilterRegistrationBean
:
http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/context/embedded/FilterRegistrationBean.html
Обновление
Вы можете зарегистрировать параметры для контекста сервлета в методе SpringBootServletInitializer#onStartup()
. Класс 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);
}
}
Другой альтернативой является определение ServletContextInitializer
bean, предложенное Энди Вилкинсоном.
Ответ 3
Также вы можете определить InitParameterConfiguringServletContextInitializer в своей конфигурации. Пример:
@Bean
public InitParameterConfiguringServletContextInitializer initParamsInitializer() {
Map<String, String> contextParams = new HashMap<>();
contextParams.put("p-name", "-value");
return new InitParameterConfiguringServletContextInitializer(contextParams);
}