Как изменить значение свойства внутри Apache Camel Route? - PullRequest
0 голосов
/ 17 января 2019

В файле свойств определен тест переменной:

test=OLD_VALUE

В следующем определении Spring-DSL определен верблюжий маршрут.Свойства загружаются через PropertiesComponent.

  <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
    <property name="cache" value="false"/>
    <property name="location" value="classpath:res.properties"/>
  </bean>


  <camelContext id="ctx" xmlns="http://camel.apache.org/schema/spring">
    <route id="toParamRoute">    
      <from uri="servlet:myParam"/>
            HERE I WOULD LIKE TO SET THE 
            VARIABLE TEST WITH A NEW VALUE, 
            SUCH THAT THE FOLLOWING LOG MESSAGE 
            WILL PRINT THE NEW VALUE, 
            E.G: test=NEW_VALUE
      <log message="{{test}}"/>                   
    </route>    
 </camelContext>

Я пробовал другой подход, используя groovy, выражение языкового скрипта, внешний пружинный бин, но безуспешно.Есть ли способ установить и изменить значение переменной, загружаемой при запуске?Каков наилучший способ сделать это?

Кто-нибудь может мне помочь?Я не нашел подобного вопроса на stackoverflow!Проблема, с которой я сталкиваюсь, и решение, которое я ищу, является основным строительным блоком для создания консоли управления веб-интерфейсом, чтобы изменить некоторые маршруты на лету.Чтобы упростить процесс, я могу сказать, что после того, как propertyPlaceholder загрузит файл свойств, через веб-страницу пользовательского интерфейса можно изменить параметры маршрутов по умолчанию и только после запуска маршрута.

1 Ответ

0 голосов
/ 19 января 2019

Свойства, оцененные с помощью синтаксиса {{property}}, разрешаются только один раз во время инициализации контекста. Если вам нужно отразить изменения во время выполнения, используйте Простой язык

Пример:

<bean id="myProperties" class="java.util.Properties"/>

<bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
    <property name="cache" value="false"/>
    <property name="location" value="classpath:res.properties"/>
    <property name="overrideProperties" ref="myProperties" />
</bean>


<camelContext id="ctx" xmlns="http://camel.apache.org/schema/spring">
    <route id="toParamRoute">
        <from uri="timer://foo"/>
        <log message="About to change property test from value ${properties:test} to value ${exchangeProperty.CamelTimerCounter}. Initial value was {{test}}"/>
        <bean ref="myProperties" method="setProperty(test, ${exchangeProperty.CamelTimerCounter})" />
        <log message="New value is ${properties:test}"/>
    </route>
</camelContext>
...