Spring構成ファイルの1つで次のプロパティファイルが定義されています。
<context:property-placeholder location="classpath:project.properties"/>
次に、クラスパスにない外部プロパティファイルのいくつかのプロパティをオーバーライドします。
私のプロジェクトをどこかにデプロイしていて、動的な構成変更が必要だとしましょう。コンテナ(Tomcatなど)のプロジェクトコードベースを更新したくありません。
1.)だから、外部プロパティファイルの最近の更新で、スプリングのロードされたプロパティファイルの値を更新(オーバーライド)する方法が必要です。
2.)事前に読み込まれているプロパティを更新する方法を誰かが共有できれば、それは素晴らしいことです。
そのため、外部プロパティファイル内の最近の更新で、スプリングのロードされたプロパティファイルの値を更新(オーバーライド)する方法が必要です。
PropertyPlaceholderConfigurer を使用できます。
いずれかの方法context
名前空間を使用する場合
<context:property-placeholder location="classpath:yourClasspath.properties,file:/some/resource/path/filePropertiesToOverride.properites"/>
またはこの方法
<bean id="placeholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:yourClasspath.properties</value>
<value>file:/some/resource/path/filePropertiesToOverride.properites</value>
</list>
</property>
</bean>
PropertiesLoaderSupport.setLocations(Resource []) のjavadocによると
...注:キーが重複する場合、後のファイルで定義されたプロパティは、前のファイルで定義されたプロパティをオーバーライドします。したがって、最も具体的なファイルが、指定された場所のリストの最後のファイルであることを確認してください。
。
事前に読み込まれているプロパティを更新する方法を誰かが共有できれば素晴らしいと思います。
現時点では、PropertyPlaceholderConfigurer
を使用しています。 PropertyPlaceholderConfigurer
はBeanFactoryPostProcessor
であるため、Bean定義(beans.xml
)プロパティ文字列($ {someProp}など)を置き換えます。その後、Beanはインスタンス化されて初期化されます。したがって、プロパティを「リロード」する方法はありません。
実行時にプロパティの変更に対応できるアプリケーションを構築する場合は、さらに検討する必要があります。
少なくとも Apache commons configuration を使用することをお勧めします。しかし、それはいくつかの問題を解決するフレームワークにすぎず、上記の質問に対する解決策について考える必要があります。
春のブーツ2では、
Java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
詳細は https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html で取得できます。