【问题标题】:org.apache.catalina.startup.Tomcat how to set application property programmaticallyorg.apache.catalina.startup.Tomcat 如何以编程方式设置应用程序属性
【发布时间】:2022-11-05 15:08:19
【问题描述】:

我有一个组件测试,编写如下:

  1. tomcat 以我们的 war 文件启动,如下所示: `

         String pathToWebXML = new File("./main/webapp").getAbsolutePath();
    
         SERVER_PORT = 8000;
    
         tomcat = new Tomcat();
         tomcat.setPort(SERVER_PORT);
         webAppContext = tomcat.addWebapp(CONTEXT_PATH, pathToWebXML);
         tomcat.start();
    

    ` 2)我们做出放心的电话并断言结果。

    WebApp 是基于 Spring 的应用程序,并具有应用程序属性文件。现在我们要更改测试中的一些应用程序属性值,以涵盖所有可能的用例。

    一般建议是使用: System.setProperty(<name>,<value>)

    但这对我们不起作用,因为如果我们从测试中执行setProperty,它会设置我们在步骤 1 中开始的测试而不是 Tomcat 的系统属性。

    我们如何影响 Tomcat 的属性?或者有没有其他方法可以改变运行在 Tomcat 中的代码的属性值,以便我们的测试可以检查所有可能的用例?

【问题讨论】:

标签: spring tomcat junit properties catalina


【解决方案1】:

您可以配置上下文以在测试中加载不同的属性文件。

在测试中配置上下文以加载与生产代码中不同的属性文件:

webAppContext.addParameter("contextConfigLocation", "classpath:/application-test.properties");

这将加载位于 src/test/resources/application-test.properties 的文件

现在您可以使用 System.setProperty() 覆盖 application-test.properties 中的值

您还可以在 src/main/resources 中添加一个名为 application-test.properties 的文件,该文件将在测试中使用。如果您只想覆盖几个值,这很有用。

请注意,如果您将 Tomcat 与 context.xml 文件一起使用,您还可以配置上下文以加载不同的属性文件:

<Context> <Parameter name="contextConfigLocation" value="classpath:/application-test.properties"/> </Context>

这将加载位于 src/test/resources/application-test.properties 的文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-22
    • 2023-01-03
    • 1970-01-01
    • 2012-08-20
    • 2021-05-20
    相关资源
    最近更新 更多