Spring mvc 如何在spring boot中设置上下文参数
在经典的web.xml类型配置中,您可以像这样配置上下文参数 web.xmlSpring mvc 如何在spring boot中设置上下文参数,spring-mvc,jetty,spring-boot,Spring Mvc,Jetty,Spring Boot,在经典的web.xml类型配置中,您可以像这样配置上下文参数 web.xml ... <context-param> <param-name>p-name</param-name> <param-value>-value</param-value> </context-param> ... 。。。 p-名称 -价值观 ... 这是如何在spring boot中实现的。我有一个需要参数的过滤器 我正在使用@Enab
...
<context-param>
<param-name>p-name</param-name>
<param-value>-value</param-value>
</context-param>
...
。。。
p-名称
-价值观
...
这是如何在spring boot中实现的。我有一个需要参数的过滤器
我正在使用
@EnableAutoConfiguration
,并且在我的pom中包含了spring boot starter jetty
您实际上可以使用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;
}
还有用于过滤器注册bean的JavaDoc:
更新
您可以在SpringBootServletInitializer#onStartup()
方法中为servlet上下文注册参数。您的应用程序类可以扩展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);
}
}
@Bean
public InitParameterConfiguringServletContextInitializer initParamsInitializer() {
Map<String, String> contextParams = new HashMap<>();
contextParams.put("p-name", "-value");
return new InitParameterConfiguringServletContextInitializer(contextParams);
}
另一种选择是按照Andy Wilkinson的建议定义ServletContextInitializer
bean。您可以通过声明ServletContextInitializer
bean来设置整个ServletContext
的参数:
@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
上的参数。属性
:
server.context_parameters.p-name=-value
还可以在配置中定义InitParameterConfiguringServletContextInitializer。例如:
@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);
}
}
@Bean
public InitParameterConfiguringServletContextInitializer initParamsInitializer() {
Map<String, String> contextParams = new HashMap<>();
contextParams.put("p-name", "-value");
return new InitParameterConfiguringServletContextInitializer(contextParams);
}
@Bean
public InitParameterConfiguringServletContextInitializer initParamsInitializer(){
Map contextParams=new HashMap();
contextParams.put(“p-name”,“-value”);
返回新的InitParameterConfiguringServletContextInitializer(contextParams);
}
自Spring Boot 2.0.0以来,他们更新了添加上下文参数的方法:
server.servlet.context-parameters.yourProperty.
您可以看到有关此的更多更新抱歉,我是想询问上下文参数,而不是init参数。我已经更新了问题以反映这一点。请查看文档中的application.properties选项。你可以在一行中解析其中的许多:)。你的答案来自于我正在做的关于如何使用Spring Boot定义过滤器列表的一些相当广泛的研究。我一直在记录我的研究。你愿意对此发表评论吗?以下是链接:@Andy如何以编程方式为Servlet2.5设置上下文参数?Spring Boot不支持Servlet2.5。