Properties 使用Apache Karaf etc/<;的示例;示例pid>;。cfg文件存储自定义属性,并在Camel-javadsl路由中使用它们

Properties 使用Apache Karaf etc/<;的示例;示例pid>;。cfg文件存储自定义属性,并在Camel-javadsl路由中使用它们,properties,configuration,apache-camel,apache-karaf,Properties,Configuration,Apache Camel,Apache Karaf,我想使用在$KARAF_HOME/etc/下的自定义配置文件中定义的自定义属性,并在我的apachecamel-javadsl路由中使用这些属性。有人能帮我举个例子来说明详细的步骤吗 在Karaf端,配置详细信息如下所示(文件位于$Karaf_HOME/etc目录中) 配置文件:$KARAF_HOME/etc/client.cfg 文件中的内容: dev.userID=userName@client.com dev.password=secretPassword 下面的代码片段是我尝试使用Jav

我想使用在$KARAF_HOME/etc/下的自定义配置文件中定义的自定义属性,并在我的apachecamel-javadsl路由中使用这些属性。有人能帮我举个例子来说明详细的步骤吗

在Karaf端,配置详细信息如下所示(文件位于$Karaf_HOME/etc目录中)

配置文件:$KARAF_HOME/etc/client.cfg

文件中的内容:

dev.userID=userName@client.com

dev.password=secretPassword

下面的代码片段是我尝试使用JavaDSL以驼峰路线访问上述道具的地方

from("timer:someTimer?period=10000")
  .setHeader("userID",simple("${env.userID}")
  .setHeader("password",simple("${env.password}")
     .log("${header[userID]}")
     .log("${header[password]}")
       .end();
上面的代码抛出了一个错误(见下文)


请帮助我如何在Camel路由中访问这些属性(使用Java DSL),配置(.cfg)文件位于$KARAF_HOME/etc目录中。希望我的问题描述可以理解。

您使用Camel simple language()来读取属性,这可以通过

.setHeader("userID",simple("{{dev.userID}}")

${env:DEMO}用于读取名为DEMO的环境变量。在您的情况下,您不必这样做,因为您有一个属性文件

但首先必须在Camel上下文中加载属性文件(client.cfg)。为此,请使用初始化PropertiesComponent,如:

PropertiesComponent pc = new PropertiesComponent();
pc.setLocation("file:${karaf.home}/etc/client.cfg"); 
context.addComponent("properties", pc);

其中context是您的Camel上下文。

在搜索有关StackOverflow的更多帮助后,我终于能够实现我所需要的。下面的代码段监视文件,并在文件更新/编辑时触发

多亏了。 请注意,ApacheKaraf关于修改运行时更新的声明不起作用。请参考其官方文档第4.8.1节,也没有适当的示例(任何地方)指导在使用Java DSL的骆驼路线中使用${KARAF_HOME}/etc/下的自定义属性。如果有人能用详细的例子说明在所有三个层面上需要做什么,我们将不胜感激

  • ApacheKaraf的etc文件夹
  • Camel项目蓝图中的Route.xml
  • java文件-我们需要在其中访问第1点中定义的那些道具

  • 谢谢。

    谢谢,Themis Pyrgiotis,我们能在骆驼路线中不使用Properties组件实现吗?ApacheKaraf的文档说${Karaf.home}下的配置文件的任何更新/etc是动态的您建议的方法是否能够在运行时采用更改?我刚刚实现了它,并且能够看到cfg文件中包含数据的日志,但是它没有侦听在同一属性上进行的运行时更新?有什么想法吗?下面是我更改值后在日志中打印的行。信息apache-karaf-4.2.5\etc]正在更新示例中的配置。欢迎@SaiBhaskar。那么,最终是否需要属性组件?我知道与属性cfg文件的连接是通过OSGI Blueprint自动完成的,但我现在不知道这是否像您正在使用的Java DSL一样提供。如果我的答案解决了你的问题,请接受我的答案。自动重新加载不包括在您的初始问题中,也许您应该为此打开一个新问题。谢谢@Themis Pyrgiotis的回答,但我的要求是在运行时更新属性,这是我相信的任何属性文件的全部目的,Apache Karaf声称能够做到,但我不这么认为。我使用具有“幂等键”和“noop”特性的文件组件实现了这一点。感谢Abhishek Chatterjee()抱歉,但您最初的问题是在骆驼中使用属性。没有提到你上一次所说的话。
    .setHeader("userID",simple("${properties:dev.userID}")
    
    PropertiesComponent pc = new PropertiesComponent();
    pc.setLocation("file:${karaf.home}/etc/client.cfg"); 
    context.addComponent("properties", pc);
    
     from("file:testingFolder?recursive=true&idempotent=true&idempotentKey=${file:name}-${file:size}&readLock=changed&noop=true")        
        .log(LoggingLevel.INFO, "Logger","${body}")
            .end();