Apache camel 如何在ApacheCamel(SpringXML)中使用SimpleRegistry属性

Apache camel 如何在ApacheCamel(SpringXML)中使用SimpleRegistry属性,apache-camel,spring-camel,Apache Camel,Spring Camel,我想使用SimpleRegistry来存储属性(作为全局变量)。在具有jms端点的路由中,使用setProperty更改属性。camel文档上周发生了更改,有许多死链接,还有注册表页面。我没有发现任何描述simpleRegistry使用的示例 我用这根绳子做底座。我不使用保险丝或补丁骆驼wildfly,因为它对于我们的简单模块来说太大了 . . . ${headers[myToken]} 标记是:{myProperty} 使用上面定义的camel上下文,我得到了一个java.io.FileN

我想使用SimpleRegistry来存储属性(作为全局变量)。在具有jms端点的路由中,使用
setProperty
更改属性。camel文档上周发生了更改,有许多死链接,还有注册表页面。我没有发现任何描述simpleRegistry使用的示例

我用这根绳子做底座。我不使用保险丝或补丁骆驼wildfly,因为它对于我们的简单模块来说太大了


.
.
.
${headers[myToken]}
标记是:{myProperty}
使用上面定义的camel上下文,我得到了一个
java.io.FileNotFoundException
在注册表中找不到属性simpleRegistry。

当我使用
并创建test.properties文件时,一切正常,但我无法更改属性。
setProperty
标记中的操作被忽略


我需要全局变量的原因是,我通过jms主题将动态配置(myToken)发送到camel上下文。单个路由应全局存储此配置。如果通过rest组件调用其他路由,则此路由需要令牌进行选择。

好的,您的问题中有多个主题

  • 您编写的代码希望使用Camel SimpleRegistry,但显然您有一个Spring应用程序
  • 如果Spring可用,驼峰注册表将自动使用Springbean注册表。尽可能使用另一个框架的可用注册表的或提供程序接口

    只有在没有其他可用信息时才使用Camel SimpleRegistry。这基本上是一个基于映射的内存注册表

  • 您想用
    设置应用程序属性
    设置一个交换属性,而不是应用程序属性。使用此选项,您可以在中保存值

  • 您希望使用“全局变量” 您也许可以使用一个Spring单例bean作为映射。然后,您可以将其自动连接到需要的位置,这就像一个应用程序范围的可用地图


    但是,请仔细考虑为什么需要这种变量。这也可能是设计问题的症状。

    好的,您的问题中有多个主题

  • 您编写的代码希望使用Camel SimpleRegistry,但显然您有一个Spring应用程序
  • 如果Spring可用,驼峰注册表将自动使用Springbean注册表。尽可能使用另一个框架的可用注册表的或提供程序接口

    只有在没有其他可用信息时才使用Camel SimpleRegistry。这基本上是一个基于映射的内存注册表

  • 您想用
    设置应用程序属性
    设置一个交换属性,而不是应用程序属性。使用此选项,您可以在中保存值

  • 您希望使用“全局变量” 您也许可以使用一个Spring单例bean作为映射。然后,您可以将其自动连接到需要的位置,这就像一个应用程序范围的可用地图


    但是,请仔细考虑为什么需要这种变量。这也可能是设计问题的症状。

    或者,您可以按照下面使用PropertiesComponent的方法获得相同的结果

    <bean id="applicationProperties" class="java.util.Properties"/>
    
    <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
        <property name="location" value="classpath:application.properties"/>
        <property name="overrideProperties" ref="applicationProperties" />
    </bean> 
    
    
    
    在驼峰上下文中定义属性占位符:

    <propertyPlaceholder id="propertiesRef" location="ref:applicationProperties" />
    
    
    
    设置一个属性,如下所示:

    <bean ref="applicationProperties" method="setProperty(token, 'Test'})" />
    
    
    

    要获取属性:${properties:token}

    或者,您可以按照下面使用PropertiesComponent的方法获得相同的结果

    <bean id="applicationProperties" class="java.util.Properties"/>
    
    <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
        <property name="location" value="classpath:application.properties"/>
        <property name="overrideProperties" ref="applicationProperties" />
    </bean> 
    
    
    
    在驼峰上下文中定义属性占位符:

    <propertyPlaceholder id="propertiesRef" location="ref:applicationProperties" />
    
    
    
    设置一个属性,如下所示:

    <bean ref="applicationProperties" method="setProperty(token, 'Test'})" />
    
    
    
    获取属性:${properties:token}