当前位置: 首页 > 知识库问答 >
问题:

如何在spring-boot中设置上下文参数

朱自明
2023-03-14

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

web.xml

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

这是如何在Spring启动中实现的。我有一个需要参数的过滤器

我使用的是@EnableAutoConfiguration,并包含了


共有3个答案

李飞翼
2023-03-14

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

server.servlet.context-parameters.yourProperty.

您可以在此链接上查看更多更新

关玄裳
2023-03-14
匿名用户

您实际上可以使用Java配置来实现这一点。如果您的过滤器需要一些参数,只需将它们放在您的application.yml(或. properties)中,在配置类中使用@Value注入它们,并将它们注册到FilterRegister strationBean中。

例如:

@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;
}

还有< code > FilterRegistrationBean 的JavaDoc:

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

使现代化

您可以在< code > SpringBootServletInitializer # onStartup()方法中注册servlet上下文的参数。您的应用程序类可以扩展< code > SpringBootServletInitializer ,并且您可以覆盖< code>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 Wilkinson的建议定义ServletContextLaunalizerbean。

叶鸿煊
2023-03-14

您可以通过声明一个ServletContextPresalizerbean来设置整个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中,不再需要使用ServletContextLaunalizer。您现在可以在application.properties中的一行中配置ServletContext上的参数:

server.context_parameters.p-name=-value
 类似资料:
  • 我将application.properties中的contextPath设置为server.contextPath=/mywebapp,在带有spring security的spring boot application中,默认url设置为/login it,而不是将上下文路径设置为/mywebapp,并将我重定向为/login而不是/mywebapp/login。如何用spring secur

  • 我使用Spring Boot 2.1.2. RELEASE编写联调,无法设置所需的上下文路径。它总是等于空字符串(用servletContext.getContextPath()获得)。 application-test.properties: 测试配置: 呼叫代码: 应用测试中的其他属性。按预期注入属性。上下文路径通常在我运行服务器时设置。我试图以@SpringBootTest的形式启动这个测试

  • 我有几个Spring Boot应用程序的实例部署在一个独特的Tomcat中。每个应用程序都配置了一个context.xml文件,该文件包含客户代码 有什么方法可以使这个日志返回配置工作吗? 在application.properties中定义的属性的使用效果很好(我将logback.xml重命名为logback-spring.xml)。在我看来,Spring boot在初始化日志记录之前并没有在E

  • 我正在尝试设置我的spring boot应用程序的上下文根。我将我的应用程序作为war文件部署到Jboss。当我将根URL部署到JBoss/wildly时,我试图设置它的上下文路径,但是它似乎被忽略了。除非我添加一个设置contex-root变量的jboss-web.xml文件,否则我的部署url总是基于war文件名: 例如:myapp.war总是部署为:localhost:8080/myapp,

  • 我是一个Spring新手,正在制作一个Spring Web应用程序(不是Spring-boot,这有多大区别?)。部署在Tomcat7服务器上。 应用程序已启动并运行。我的问题是只能通过标准URL访问: http://mycompany.com:8081/cwing-0.0.3-snapshot/index.html 以下操作不起作用:http://mycompany.com:8081/cwing