Spring MVC 如何在spring-boot中设置context-param

vxf3dgd4  于 2022-11-14  发布在  Spring
关注(0)|答案(4)|浏览(588)

在传统的web.xml类型配置中,您可以如下配置上下文参数
web.xml

...
<context-param>
  <param-name>p-name</param-name>
  <param-value>-value</param-value>
</context-param>
...

这是如何实现在Spring启动。我有一个过滤器,需要参数。
我正在使用@EnableAutoConfiguration,并在我的pom中包含了<artifactId>spring-boot-starter-jetty</artifactId>

qkf9rpyu

qkf9rpyu1#

您可以使用server.servlet.context-parameters应用程序属性来设定参数。例如:

server.servlet.context-parameters.p-name=p-value

在Sping Boot 1.x中(已不再支持),此属性被命名为server.context-parameters

servlet.context-parameters=p-name=p-value

或者,可以通过声明ServletContextInitializer Bean以编程方式配置参数:

@Bean
public ServletContextInitializer initializer() {
    return new ServletContextInitializer() {

        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            servletContext.setInitParameter("p-name", "-value");
        }
    };
}
fwzugrvs

fwzugrvs2#

实际上,可以使用Java config来实现这一点。如果您有需要一些参数的过滤器,只需将它们放在您的应用程序.yml(或.properties)中,使用@Value将它们注入到您的config类中,并在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 for FilterRegistrationBean
http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/context/embedded/FilterRegistrationBean.html

更新

您可以在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);
    }

}

另一种方法是定义Andy威尔金森建议的ServletContextInitializer bean。

inb24sb2

inb24sb23#

从Sping Boot 2.0.0开始,他们更新了添加上下文参数的方式:

server.servlet.context-parameters.yourProperty.

您可以在此link上看到更多更新

ar5n3qh5

ar5n3qh54#

您还可以在配置中定义InitParameterConfiguringServletContextInitializer。例如:

@Bean
public InitParameterConfiguringServletContextInitializer initParamsInitializer() {
    Map<String, String> contextParams = new HashMap<>();
    contextParams.put("p-name", "-value");
    return new InitParameterConfiguringServletContextInitializer(contextParams);
}

相关问题