我有其中屬性佔位符被用於讀取的屬性,配置在applicationContext.xml
的應用程序:添加屬性屬性佔位符
...
<context:property-placeholder
location="classpath*:META-INF/spring/*.properties"/>
...
中的應用在一個Tomcat的運行,並使用在context.xml中定義的參數。 應用程序像普通屬性一樣訪問此參數(@Value(${cfma.applicationUrl})
)。 This works
在我的測試用例中,我沒有這個tomcat屬性,所以我想將它們「手動」添加到應用程序上下文中。但也加載正常applicationContext.xml
testContext.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>
現在我有兩個方面:財產佔位符,這不工作(當然) - 所以我的問題是,誰能夠延長我我的測試中的「正常」屬性佔位符中的屬性?
更多解釋的什麼,我需要:
- 生產環境(以及開發環境)定義了通過Tomcat的參數的一些屬性。因此,它們不包含在任何屬性文件中,但它們可以像普通屬性一樣無法訪問(
@Value(${cfma.applicationUrl})
)。此外,如果屬性沒有在Tomcat中定義,則不能有任何回退,應用程序一定不能啓動! - 在測試用例(使用spring上下文)中,我必須介紹如何插入屬性(cfma.applicationUrl),以便它可以注入到帶註釋的變量中。 但如果我添加第二
context:property-placeholder
他們不會被合併:在https://jira.springsource.org/browse/SPR-4881
@see評論 - 他們解釋這種行爲。
當我談到我說的somethink這樣Tomcat的參數:
的context.xml:
如果在同一location
屬性添加到定義的
context:property-placeholder
<?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>
見http://stackoverflow.com/questions/6375016/spring-properties-file-setting-default-values它有效地允許您定義多個屬性的位置。缺少屬性文件將被忽略,並且加載列出的最後一個有效文件。 – Fil
@Filip:我的問題不是關於多個位置。我得到了多個屬性佔位符配置器的困擾。我正在尋找一種方法來擴展/更改「正常」應用程序上下文屬性佔位符配置器的配置從我的test-context.xml – Ralph
抱歉。我的評論不是很清楚,我沒有提出一種指定多個屬性文件的方法,而是一種執行條件屬性查找的方法。下面是一個擴展的答案。 – Fil