2016-08-24 2 views
0

クラスパス(src/main/resources)内にmessages_en.propertiesがあり、/ configフォルダ内にjarの外にmessages_en.propertiesがあります。しかし、/ configフォルダ内messages_en.properties(コンテンツ)も、このタグを追加した後、クラスパス内にあるコンテンツを上書きしません:messages_en.propertiesの内容を外部のmessages_en.propertiesから上書きする

spring.config.location =のconfig/messages_en.properties

を私が間違っているのですか?これは春のブートではまったく不可能ですか?

注:application.propertiesは/ configフォルダ(外部化された構成)にあります。

答えて

1

外部アプリケーション構成(externalized configuration)の場所を指定するために使用するspring.config.locationを構成しています。

あなたが例えば、file:であなたのパスの接頭辞すべき外部の場所を参照したい場合:

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

あなたはmessages_en.propertiesと呼ばれるファイルを使用する場合しかし、それはより多くの可能性がありますこれはapplication.propertiesファイルの代わりに使用するのではなく、MessageSource(国際化/ローカリゼーション用)のプロパティファイルです。

あなたは、たとえば、spring.messages.*プロパティを設定することにより、同様にこれらのメッセージの外部の場所を設定することができます:それは規則だから

spring.messages.basename=file:config/messages 

あなたは、言語コード(en)を追加する必要はありませんSpringがすでに適切なメッセージファイルを検出するために使用しています。

MessageSourceを呼び出すときの言語に応じて、messages_en.propertiesまたはmessages_fr.propertiesまたは...を開き、指定された言語のプロパティが見つからない場合はフォールバックとしてmessages.propertiesを使用します。

EDIT:MessageSourceAutoConfigurationのみ、クラスパスリソースのをで蹴り、デフォルトのフォールバックにmessages.propertiesを持っている必要がありますことが表示されます。あなたがそれらを持っていない場合、それは動作しません。

@ConfigurationPropertiesを使用してただし、これらのプロパティを使用することができますし、手動でMessageSourceを作成します。

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

それは数回(アプリケーションの2の再起動)を働いたが、その後、それは今messages_enを拾っています。クラスパスと外部(つまり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:config/messages"、 "classpath:messages"); return messageSource; } 絶対パスを使用すると、絶対パスがなくても動作しません。何か案が? – Pavanraotk

関連する問題