Динамическая загрузка конфигурации с использованием cm:managed-properites в Karaf 3.0.5

У меня есть простой пакет приложений Camel, который нужно развернуть в Karaf 3.0.5 в Apache Service Mix 6.1. Конфигурационный файл находится в каталоге etc/ (допустим, он называется wf.cfg). Я хочу иметь функцию динамического изменения конфигурации в моем комплекте приложений. Так что всякий раз, когда что-то изменяется в wf.cfg, оно сразу же доступно для сборки. Для этого я добавил следующее в свой blueprint.xml

<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>

Но это не помогло. Может кто-нибудь, пожалуйста, помогите мне решить эту проблему.

Обратите внимание: я не хочу использовать cm:property-placeholder, так как он перезагружает весь контекст при изменении файла cfg. Я хочу использовать только cm:managed-properties.


person Pradeep    schedule 09.05.2016    source источник


Ответы (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");
     }
}
person Pradeep    schedule 09.05.2016