2016-08-24 102 views
0

我有類路徑中(src /主/資源)和一個罐子以外內部的messages_en.properties,在/ config文件夾。但在/配置文件夾中的messages_en.properties(內容)不覆蓋其是類路徑內的內容,即使添加此標記之後:覆蓋內容

spring.config.location =配置/ messages_en.properties

我錯了,或者這在春季開機時根本不可能?

待辦事項,在application.properties是在/ config文件夾(外部配置)。

回答

1

您正在配置spring.config.location,用於提供外部應用程序配置的位置(externalized configuration)。

如果你想引用你應該file:前綴您的路徑外部的位置,例如:

spring.config.location=file:config/application.properties 

然而,當你使用一個名爲messages_en.properties它更可能這是MessageSource(用於國際化/本地化)所使用的屬性文件,而不是將它用作您的application.properties文件的替代品。

您可以配置這些消息外部位置爲好,通過配置spring.messages.*特性,例如:

spring.messages.basename=file:config/messages 

您不必添加的語言代碼(en),因爲這是慣例Spring已經用它來檢測正確的消息文件。

根據給定的語言調用MessageSource時,它將打開messages_en.properties或messages_fr.properties或...並使用messages.properties作爲回退,如果找不到所提供語言的屬性。

編輯:看來,只有MessageSourceAutoConfiguration踢在類路徑資源,你需要有一個默認的備用messages.properties。如果你沒有這些,這是行不通的。

但是,你仍然可以使用這些屬性,並創建一個MessageSource使用手動@ConfigurationProperties

@Bean 
@ConfigurationProperties("spring.messages") 
public MessageSource messageSource() { 
    return new ReloadableResourceBundleMessageSource(); 
} 
+0

它的工作幾次(的申請在重新啓動),但在那之後,它現在拿起messages_en。在classpath和external(即config/messages_en.properties)中定義的屬性不會覆蓋其中的屬性。現在,如果我刪除類路徑中的一個,它開始說沒有找到屬性。 你能讓我知道我可能會出錯嗎? – Pavanraotk

+0

您可以嘗試使用外部配置顯式創建一個'MessageSource' bean('@ Bean'),並將它作爲主('@ Primary')?我猜想Spring會創建另一個使用類路徑消息的'MessageSource' bean。 – g00glen00b

+0

創建一個bean。 @Bean public ReloadableResourceBundleMessageSource messageSource(){ ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); //messageSource.setBasenames("file:C:\\Users\\pavan.rao\\Documents\\mobiquity\\txn\\target\\config\\messages「,」classpath:messages「); messageSource.setBasenames(「file:config/messages」,「classpath:messages」); 返回messageSource; } 現在,如果我使用絕對路徑,它會啓動,沒有絕對路徑,它不起作用。任何想法? – Pavanraotk