我有一个应用程序,其中属性占位符用于读取属性,在 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/