在camelContext中获取karaf env变量

时间:2017-04-10 15:39:05

标签: apache-camel cxf apache-karaf jbossfuse

我想在camelContext中获取karaf env变量 我添加了

<ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]"/>

在camelcontext之外,并试图在camelcontext中使用karaf.home。但它无法从该位置加载数据。我试过这样的

<camelContext id="_camelContext" xmlns="http://camel.apache.org/schema/blueprint"> <propertyPlaceholder id="config" location="file:$[karaf.home]/etc/application_config.prope‌​rties" /> </camelContext>

我们无法在camelcontext中访问它吗?

2 个答案:

答案 0 :(得分:0)

Karaf变量定义为JVM系统变量,而不是env变量 你需要什么? 如果您只需要加载配置文件,请使用OSGi方法,不要直接引用任何路径

<blueprint>
    <cm:property-placeholder id="yourConfig"
                             persistent-id="file.name" />

    <camelContext>
        <propertyPlaceholder location="blueprint:yourConfig" />

        <!-- Access properties using {{property.name}} -->
        <route id="One" autoStartup="{{route.one.enabled}}" > ...
    </camelContext>
</blueprint>

这将从${karaf.home}/etc/file.name.cfg加载属性 你的包也可以在其他容器内运行。

答案 1 :(得分:0)

如果您尝试使用环境变量内部标签,我会在其他手册中看到过类似内容,等,应该使用{{var}} 而不是$ { var}。您可以使用{{karaf.home}}或{{karaf.root}}或{{karaf.etc}}。

重要提示:如果您偶尔在文件路径\ r中(例如C:\ receive.cfg)具有格式化符号,则\ n路径评估工作不正确,Camel不支持符号转义,因此唯一的方法是-编辑文件名。

我的蓝图的一部分:

<camelContext xmlns="http://camel.apache.org/schema/blueprint">
    <route>
        <from .../>
        <setBody>
            <method ref="dbExtractorBean" method="extract(true, '{{karaf.home}}\etc\com.mycopmany.extraction.cfg')"/>
        </setBody>
        <to .../>
    </route>
</camelContext>

可以看到env值:

  • karaf @ root> shell:env karaf.base
  • karaf @ root> shell:env karaf.home

此配置适用于我开发的Windows计算机,在Linux上,您应使用/进行路径分离,(目前)我不知道如何配置路径分隔符以使此路由在Windows和Linux计算机上均有效,而无需重新编译