2016-08-24 315 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