当前位置: 首页 > 知识库问答 >
问题:

使用 cm:Karaf 3.0.5 中的托管属性加载动态配置

毕黎昕
2023-03-14

我有一个简单的Camel应用程序包,它将部署在Apache Service Mix 6.1下的Karaf 3.0.5中。配置文件放在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:仅托管属性。

共有1个答案

宇文梓
2023-03-14

我找到了解决办法

刷新方法应具有参数 Map

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");
     }
}

 类似资料:
  • 问题内容: 我已经编写了一个PropertyUtils类(来自互联网),它将加载属性 而PropertiesUtil类如下所示 稍后,我可以通过调用PropertiesUtil.getProperty()方法来获取属性。 但是现在我要稍作修改,以便如果myApp.properties被用户修改/更改,则应再次加载 可能我需要FileWatcher类 但我的怀疑是 如何使用classpath:myA

  • 我已经写了一个PropertyUtils类(来自互联网),它将加载属性 PropertiesUtil类如下所示 稍后,我可以通过调用PropertiesUtil来获取属性。getProperty()方法。 但现在我想稍微修改一下,如果myApp。属性被用户修改/更改,应该重新加载 可能我需要FileWatcher类 但我的疑虑是 如何使用classpath创建File对象:myApp/myApp.

  • 问题内容: 我一直在搜索,但找不到这些步骤。 我有一个包含以下内容的属性文件: 我有一个类似的文件,但是在machines元素中具有不同数量的成员,如下所示: 我的问题是如何以一种通用方式将这个可变长度的机器变量加载到我的spring配置中的bean中? 像这样的东西: 机器是我的Java代码中的数组或列表。我可以定义它,但是我想知道如何做到这一点。 基本上,我宁愿让spring进行解析并将每个值

  • 我有一个Spring Boot应用程序,它有一些配置属性。我正在尝试为一些组件编写测试,并希望从< code>test.properties文件中加载配置属性。我不能让它工作。 这是我的代码: 文件(在src/test/resources下): 配置属性类: 我的测试: 测试失败,并显示“预期实际不为空”,这意味着未设置配置属性类中的属性。

  • 我在web应用程序中工作。我正在使用spring分析加载基于环境的属性。下面是样品 在web.xml中,我们可以给出配置文件 现在,我的查询是针对我需要创建一个单独的Java类的每个环境。 问题:是否可能只有一个类,比如提供配置文件名称作为某个绑定参数,比如。 同时,让我知道是否有其他更好的选择,以实现同样的。

  • 我的网站(www.nykidplaces.com)托管在Google App Engine上。 加载主页有时非常慢,10秒或更长时间。经过一些分析,我注意到问题通常是由加载静态文件(css、javascript或图像)引起的。大多数静态文件加载速度很快,但偶尔一个随机静态文件加载速度很慢。 例如,这个4Kb文件通常需要 虽然是真的;做时间工作http://www.nykidplaces.com/s