java - 将属性添加到属性占位符

标签 java unit-testing spring properties

我有一个应用程序,其中属性占位符用于读取属性,在 applicationContext.xml 中配置:

...
<context:property-placeholder
     location="classpath*:META-INF/spring/*.properties"/> 
...

应用程序在 Tomcat 中运行并使用在 context.xml 中定义的参数。 应用程序像普通属性一样访问此参数 ( @Value(${cfma.applicationUrl}) )。 这行得通

在我的测试用例中,我没有这个 tomcat 属性,所以我想将它们“手动”添加到应用程序上下文中。还能加载正常applicationContext.xml

测试上下文.xml:

<import resource="classpath:/META-INF/spring/applicationContext.xml" />
<context:property-placeholder properties-ref="simulatedTomcatProperties"/>
<util:properties id="simulatedTomcatProperties">
   <prop key="cfmt.applicationBaseUrl">localhost:8080/cfmt</prop>
</util:properties>

现在我有两个 context:property-placeholder 并且这不起作用(当然)- 所以我的问题是,我可以在我的测试中扩展“正常”property-placeholder 中的属性吗?


我需要的更多说明:

  • 生产环境(以及开发环境)通过 Tomcat 参数定义一些属性。因此它们不包含在任何属性文件中,但可以像普通属性一样轻松访问它们(@Value(${cfma.applicationUrl}))。此外,不得有任何回退,如果 Tomcat 中未定义属性,则应用程序不得启动!
  • 在测试用例(使用 spring 上下文)中,我必须知道如何插入属性 (cfma.applicationUrl),以便它可以注入(inject)到带注释的变量中。 但是如果我添加第二个 context:property-placeholder它们没有合并:

@查看 https://jira.springsource.org/browse/SPR-4881 上的评论-- 他们解释了这种行为。


当我谈论 Tomcat 参数时,我是在谈论这样的想法:

上下文.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Parameter name="cfmt.applicationBaseUrl"
          value="http://localhost/demoApp" override="false"/>
</Context>

最佳答案

不确定这是否有帮助,但我在类似情况下所做的是有 2 个同名的 app.properties 文件,一个在 sec/test/resources 中,另一个在 src/main/resources 中。现在在测试期间加载第一个,因为测试类首先在类路径上,但是当我部署时只有主要的在那里,所以它被加载。

关于java - 将属性添加到属性占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6387450/

相关文章:

c++ - 链接 UnitTest++ 失败

java - Spring Security HeaderPreAuthentication Principal 未从 @AuthenticationPrincipal 解析

java - 用于自动化测试的嵌入式 jetty

java - 将oracle表数据导出为sql Insert-String

java - 通过shell脚本将参数从txt文件传递给java文件

c# - 模拟服务调用对象返回 null

ruby-on-rails - 使用子存在验证创建父子 Factory Girl

java - 缓冲写入器和读取器正确的顺序/使用

Java通过MouseEvent访问点击JButton的公共(public)方法

java - 未从查询字符串获取值