3

コモンコンフィギュレーション2を使用すると、特定のファイルベースのプロパティが変更されたときに通知を受けたいと思います。そのためには、ReloadingFileBasedConfigurationBuilder、PeriodicReloadingTriggerを使用しています。Apacheのコモンコンフィギュレーション2:ReloadingFileBasedConfigurationBuilderのConfigurationEventが生成されない

ドキュメントごとに、ビルダーは中央のコンポーネントとして使用し、基礎となるファイルが変更されたときにbuilder.getConfiguration()によって構成を再生成する必要があります。ファイルが変更されたときにConfigurationBuilderEvent.RESET通知を受け取ることができました。新しい設定で自分の設定を更新することができます。

ただし、ConfigurationEvent.ANYのイベントリスナーを追加しようとすると、変更されたファイルの実際のプロパティが通知されるため、通知されません。どんな助けもありがとうございます。

import java.io.File; 
import java.util.concurrent.TimeUnit; 

import org.apache.commons.configuration2.PropertiesConfiguration; 
import org.apache.commons.configuration2.builder.ConfigurationBuilderEvent; 
import org.apache.commons.configuration2.builder.EventListenerParameters; 
import org.apache.commons.configuration2.builder.ReloadingFileBasedConfigurationBuilder; 
import org.apache.commons.configuration2.builder.fluent.Parameters; 
import org.apache.commons.configuration2.event.ConfigurationEvent; 
import org.apache.commons.configuration2.event.EventListener; 
import org.apache.commons.configuration2.reloading.PeriodicReloadingTrigger; 

public class ReloadingConfigEventTest { 
    public static void main(String[] args) throws Exception { 
     Parameters params = new Parameters(); 
     EventListenerParameters listenerParams = new EventListenerParameters(); 
     listenerParams.addEventListener(ConfigurationEvent.ANY, new EventListener<ConfigurationEvent>() { 
      public void onEvent(ConfigurationEvent event) { 
       System.out.println(event.getEventType().getName() +" "+event.getPropertyName()); 
      } 
     }).addEventListener(ConfigurationBuilderEvent.RESET, new EventListener<ConfigurationBuilderEvent>() { 
      public void onEvent(ConfigurationBuilderEvent event) { 
       System.out.println("Event:" + event.getEventType().getName()); 
      } 
     }); 

     ReloadingFileBasedConfigurationBuilder<PropertiesConfiguration> builder = new ReloadingFileBasedConfigurationBuilder<PropertiesConfiguration>(
       PropertiesConfiguration.class) 
         .configure(params.fileBased().setFile(new File("src/main/resource/override.conf")), listenerParams); 
     PeriodicReloadingTrigger trigger = new PeriodicReloadingTrigger(builder.getReloadingController(), null, 1, 
       TimeUnit.SECONDS); 
     trigger.start(); 

     //modify the property file during the infinite loop, the new property is picked, but the SET_PROPERTY notification is missing 
     while (true) { 
      Thread.sleep(1000); 
      System.out.println(builder.getConfiguration().getString("test.property1")); 
     } 
    } 
} 

答えて

0

は、残念ながら、私は、少なくとも最新commons-configuration2ライブラリのソース(2.1.1)で、これが可能であるとは思わない:

以下は、これを実証するための私のサンプルプログラムです。 ReloadingFileBasedConfigurationBuilderだけFileBasedConfiguration(例えば、PropertiesConfiguration)から派生した構成のインスタンスを移入し、FileBasedConfigurationオブジェクトはすべて私が興味を持ってきた

など ADD_PROPERTYのようなイベントを発生さでしょう使用内部メソッド、 SET_PROPERTY、なしによってロードされていますこの自分自身で過去には、しかし commons-configuration2ちょうどこのように設定されていません。

関連する問題