外部アプリケーション構成(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();
}
それは数回(アプリケーションの2の再起動)を働いたが、その後、それは今messages_enを拾っています。クラスパスと外部(つまりconfig/messages_en.properties)の内部で定義されているプロパティは、内部のものを上書きしません。今、クラスパス内のクラスを削除すると、プロパティはもはや見つからないということになります。 どこが間違っているのか教えていただけますか? – Pavanraotk
外部設定で 'MessageSource' Beanを明示的に(' @ Bean')作成してプライマリ( '@ Primary')にしてみることができますか?どうやらSpringはクラスパスメッセージを使用する別の 'MessageSource' Beanを作成していると思います。 – g00glen00b
Beanを作成しました。 @Bean public ReloadableResourceBundleMessageSource messageSource(){ ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); ""メッセージパス: "; messageSource.setBasenames( "file:config/messages"、 "classpath:messages"); return messageSource; } 絶対パスを使用すると、絶対パスがなくても動作しません。何か案が? – Pavanraotk