2016-05-09 2 views
1

私はApache Service Mix 6.1でKaraf 3.0.5にデプロイする単純なCamelアプリケーションバンドルを用意しています。設定ファイルはetc /ディレクトリに置かれます(これはwf.cfgという名前です)。私は、アプリケーションバンドルに動的設定変更機能を持たせたいと思っています。 wf.cfgで何かが変更されるとすぐにバンドルすることができます。このために私は私のblueprint.xmlKarafのcm:managed-properitesを使用した動的コンフィグレーション3.0.5

<bean id="configBean" class="com.jabong.orchestratorservice.basecomponent.config.ConfigBean"> 
     <cm:managed-properties persistent-id="wf" update-method="refresh" update-strategy="component-managed"/> 
    </bean> 

public class ConfigBean { 
    private String env; 
    public String getEnv() { 
     return env; 
    } 
    public void setEnv(String env) { 
     this.env = env; 
    } 
    public void refresh() { 
     System.out.println("Config refreshed"); 
    } 
} 

に次のように追加している。しかし、私はwf.cfgファイルを更新するたびに、ConfigBeanクラスのリフレッシュ方法が呼び出されることはありません。

私は、管理サービスファクトリを使用していました。

<cm:managed-service-factory id="managed-service-factory"        factory-pid="wf"       interface="com.jabong.orchestratorservice.basecomponent.config.ConfigBean"> 
<cm:managed-component class="com.jabong.orchestratorservice.basecomponent.config.ConfigBean"> 
      <cm:managed-properties persistent-id="" update-strategy="component-managed" update-method="refresh" /> 
</cm:managed-component> 
    </cm:managed-service-factory> 

しかし、それは助けになりません。誰かが私にこの問題を解決するのを助けてくれますか?

注:cfgファイルを変更したときに完全なコンテキストをリロードするので、cm:property-placeholderは使用しません。私はcm:managed-propertiesのみを使用したいと思います。

答えて

1

解決策が見つかりました。

リフレッシュ方法には、引数Map<String, String> propertiesが必要です。

public class ConfigBean { 
    private String env; 
    public String getEnv() { 
     return env; 
    } 
    public void setEnv(String env) { 
     this.env = env; 
    } 
    public void refresh(Map<String, String> properties) { 
     System.out.println("Config refreshed"); 
    } 
} 
関連する問題