2017-08-11 12 views
0

私は、フォルダ内に保存されているすべてのプロパティファイルにアクセスする必要があるSpringアプリケーションを作成しています。私はReloadingCombinedConfigurationBuilderアプローチを試みましたが、設定は一度しか更新されず、それ以降のファイル変更は表示されません。ここで私が使用していたコードされていますReloadingCombinedConfigurationBuilderが1回のリロード後にリロードされない

ReloadingCombinedConfigurationBuilder combinedBuilder = new ReloadingCombinedConfigurationBuilder() 
       .configure(params.fileBased().setFile(new File("configuration.xml"))); 

は、ここに私のconfiguration.xmlのです:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<configuration> 
    <properties fileName="{absolute-path}/a.properties" config-reload="true" reloadingRefreshDelay="10000"/> 
    <properties fileName="{absolute-path}/b.properties" config-reload="true"/> 
</configuration> 

その後、私はプログラム的にいくつかのプロパティの設定を追加します。 Configurationをプログラムで追加しない場合、combinedBuilder.getReloadingController()は、triggerを設定しているときにnullを返します。

Configuration config = builder.getConfiguration(); 
     combinedBuilder.getConfiguration().addConfiguration(myFileBasedConfigurationBuilderconfig.getConfiguration()); 

、トリガーを起動します。

PeriodicReloadingTrigger trigger = new PeriodicReloadingTrigger(
       combinedBuilder.getReloadingController(), null, 5, TimeUnit.SECONDS); 
     trigger.start(); 

私はそれを実行してプロパティを変更すると変更が一度&反映されているファイルを、それが変更された値を提供を停止します。

提案は大歓迎です。

答えて

0

私は正確な問題に直面していましたが、PeriodicReloadingTriggerを使用するのではなく、Refresh Delayを使用して構成要求イベントでアクセスしていたときに構成を再ロードしていました。

ビルダーでこれを設定する方法は次のとおりです。

builder.addEventListener(ConfigurationBuilderEvent.CONFIGURATION_REQUEST, new EventListener() { 
    @Override 
    public void onEvent(Event arg0) { 
    builder.getReloadingController().checkForReloading(null); 
    } 
}); 

ReloadingRefreshDelayビルダーに設定することができますいずれかのparamsか、すでにやっているように、それはXMLで定義することができます。

0

バージョン2.2以降、ReloadingCombinedConfigurationBuilderはすべてのリロード後にReloadingControllerをスワップして表示します。 (にする必要がありますか?)PeriodicReloadingTriggerは、もはやビルダーに接続されていないコントローラーをpingしているため、元のコードは機能しません。 Prasadの答えは、builder.getReloadingController().checkForReloading(null)と呼んでいます。これは現在のコントローラに対して常に機能します。 Springでは、Springのタイミング機能を使用する必要がありますが、純粋なJavaでは、次のようなことができます。

関連する問題