Пример использования Apache Karaf и т. Д. /Файлы .cfg для хранения пользовательских свойств и использования их в маршруте Camel Java DSL - PullRequest
0 голосов
/ 05 июня 2019

Я бы хотел использовать пользовательские свойства, определенные в пользовательском файле конфигурации в $ KARAF_HOME / etc /, и использовать эти свойства в моем маршруте Apache Camel Java DSL.Может ли кто-нибудь помочь мне с подробными шагами с примером?

В конце Karaf детали конфигурации, как показано ниже (файл находится в каталоге $ KARAF_HOME / etc).

Файл конфигурации: $ KARAF_HOME / etc / client.cfg

Содержимое в файле:

dev.userID=userName@client.com

dev.password = secretPassword

Ниже приведен фрагмент, где я пытаюсь получить доступ к вышеуказанным реквизитам на верблюжьем маршруте с использованием Java DSL.

from("timer:someTimer?period=10000")
  .setHeader("userID",simple("${env.userID}")
  .setHeader("password",simple("${env.password}")
     .log("${header[userID]}")
     .log("${header[password]}")
       .end();

Приведенный выше кодвыдает ошибку (см. ниже).

Caused by: org.apache.camel.language.simple.types.SimpleIllegalSyntaxException: Unknown function: env.userID at location 0

${env.userID}
*
at org.apache.camel.language.simple.SimpleExpressionParser.parseExpression(SimpleExpressionParser.java:67) ~[132:org.apache.camel.camel-core:2.24.0]
at org.apache.camel.language.simple.SimpleLanguage.createExpression(SimpleLanguage.java:196) ~[132:org.apache.camel.camel-core:2.24.0]
at org.apache.camel.language.simple.SimpleLanguage.createExpression(SimpleLanguage.java:230) ~[132:org.apache.camel.camel-core:2.24.0]
at org.apache.camel.builder.SimpleBuilder.createExpression(SimpleBuilder.java:115) ~[132:org.apache.camel.camel-core:2.24.0]
... 11 more

Пожалуйста, помогите мне, как получить доступ к этим свойствам в Camel Route (используя Java DSL), файл конфигурации (.cfg) находится в каталоге $ KARAF_HOME / etc,Надеюсь, мое описание проблемы понятно.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

После поиска дополнительной помощи в StackOverflow, наконец, я смог достичь того, что мне нужно. Ниже приведен фрагмент кода, который отслеживает файлы и запускает их каждый раз, когда происходит обновление / редактирование файла (ов).

 from("file:testingFolder?recursive=true&idempotent=true&idempotentKey=${file:name}-${file:size}&readLock=changed&noop=true")        
    .log(LoggingLevel.INFO, "Logger","${body}")
        .end();

Благодаря сообщению . Обратите внимание, что претензия Apache Karaf на адаптацию обновлений времени выполнения не работает. Пожалуйста, обратитесь к разделу 4.8.1 в их официальной документации здесь , также нет подходящих примеров (где-либо), руководящих использованием пользовательских свойств в $ {KARAF_HOME} / etc / в Маршруте (-ах) Camel с использованием Java DSL. Высоко ценю, если кто-то может объяснить подробным примером, охватывающим то, что необходимо сделать на всех трех уровнях, т.е.

  1. папка Apache Karaf и т. Д.
  2. Route.xml в проекте проекта Camel
  3. Файл RouteBuilder.java - где нам нужен доступ к тем реквизитам, которые определены в пункте № 1.

Спасибо.

0 голосов
/ 05 июня 2019

Для чтения свойств используется простой язык Camel (https://camel.apache.org/simple.html)), и это можно сделать с помощью

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

ИЛИ

.setHeader("userID",simple("${properties:dev.userID}")

$ {env: DEMO} используется для чтения переменной окружения с именем DEMO. Что в вашем случае вам не нужно, поскольку у вас есть файл свойств.

Но сначала у вас естьчтобы загрузить свой файл свойств (client.cfg) в ваш верблюжий контекст. Для этого вы должны инициализировать PropertiesComponent, например:

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

Где context - ваш верблюжий контекст.

...