3

這是我的一個applicationContext定義來檢索一些屬性。@ActiveProfile和spring.profiles.active

<!-- get some properties --> 
<context:property-placeholder 
     ignore-resource-not-found="false" ignore-unresolvable="false" 
     location="classpath:/properties/${spring.profiles.active:test}/some.properties"/> 

正如你所看到的,我讓spring.profiles.active決定將讀取哪些屬性。 我的測試標註有:

@ActiveProfile("integration") 

你猜對我的Spring bean配置文件實際上是匹配在部署/測試應用程序的環境。 仍然我的位置屬性已解析爲「/properties/test/some.properties」。這當然是因爲spring.profiles.active在這種情況下似乎沒有得到解決。

我怎樣才能獲得正確的屬性?

回答

1

這是因爲活動配置文件可能被系統屬性激活(但在@ActiveProfiles的情況下,它以另一種方式工作)。

就像這樣:

<beans profile="dev,prod,qa"> 
    <context:property-placeholder location="classpath:some.properties" ignore-unresolvable="true"/> 
</beans> 

<beans profile="test"> 
    <context:property-placeholder location="classpath:some-test.properties" ignore-unresolvable="true"/> 
</beans> 

此外,您可以嘗試改變 location="classpath:/properties/${spring.profiles.active:test}/some.properties"location="classpath:/properties/${spring.profiles.active}/some.properties"

+0

這確實是一個解決方案,我也在想,但這仍然感覺像@ActiveProfile註釋實現中的一個錯誤。爲了完整起見,我會期待它設置spring.profiles.active屬性。我不是寫很多xml的忠實粉絲。 – 2013-03-05 18:58:13

+0

在這種情況下,您可以添加自定義JUnitTestRunner並根據@ActiveProfiles設置系統屬性 – 2013-03-05 19:41:21

+0

我們還可以使用@PropertySource設置propertysource,並確保我們的PropertyPlaceHolder不會抱怨丟失的屬性文件。但重要的是失去擁有這個屬性。 – 2013-03-06 05:54:27

1

見票:https://jira.springsource.org/browse/SPR-8982#comment-88498

有人已經做了一個請求是:

覆蓋由測試在運行時從命令行中「-Dspring.profiles.active」或其他systemProperty指定

我的評論的@ActiveProfile一個選項:

這也應設置屬性spring.profiles.active。

相關問題