Exec

Поддерживается только производитель

Компонент Exec можно использовать для выполнения системных команд.

Dependencies

Пользователям Maven необходимо добавить следующую зависимость в свой файлpom.xml

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-exec</artifactId>
  <version>${camel-version}</version>
</dependency>

Где ${camel-version} необходимо заменить на актуальную версию Camel.

URI format

exec://executable[?options]

Где executable находится имя или путь к файлу системной команды, которая будет выполнена

? Если используется имя исполняемого файла (например, exec:java), исполняемый файл должен находиться в системном пути.

Configuring Options

Компоненты Camel настраиваются на двух отдельных уровнях:

  • уровень компонентов

  • уровень конечной точки

Configuring Component Options

На уровне компонентов задаются общие и общие конфигурации, которые затем наследуются конечными точками. Это самый высокий уровень конфигурации.

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

У некоторых компонентов всего несколько параметров, а у других -- много. Поскольку компоненты обычно имеют предустановленные значения по умолчанию, которые широко используются, зачастую вам может потребоваться настроить лишь несколько параметров компонента, а то и вовсе ни одного.

Вы можете настроить компоненты, используя:

  • Компонент DSL (opens in a new tab) .

  • в файле конфигурации ( application.propertiesфайлы *.yaml, и т.д.).

  • непосредственно в коде Java.

Configuring Endpoint Options

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

Конечные точки чаще всего настраиваются непосредственно в URI конечной точки в виде параметров пути и запроса . Вы также можете использовать Endpoint DSL (opens in a new tab) и DataFormat DSL (opens in a new tab) в качестве типобезопасного способа настройки конечных точек и форматов данных в Java.

Хорошей практикой при настройке параметров является использование заполнителей свойств (opens in a new tab) .

Заполнители свойств обеспечивают несколько преимуществ:

  • Они помогают предотвратить использование жестко запрограммированных URL-адресов, номеров портов, конфиденциальной информации и других настроек.

  • Они позволяют вынести конфигурацию за пределы кода.

  • Они помогают коду стать более гибким и пригодным для повторного использования.

В следующих двух разделах перечислены все параметры, сначала для компонента, а затем для конечной точки.

Component Options

Компонент Exec поддерживает 2 параметра, которые перечислены ниже.

lazyStartProducer (producer)

  • Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.

  • По умолчанию: false

  • Тип: boolean

autowiredEnabled (advanced)

  • Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.

  • По умолчанию: true

  • Тип: boolean

Endpoint Options

Конечная точка Exec настраивается с использованием синтаксиса URI:

exec:executable

Со следующими параметрами пути и запроса :

Path Parameters (1 parameters)

executable (producer)

  • Обязательно. Задаёт исполняемый файл для выполнения. Исполняемый файл не должен быть пустым или иметь значение NULL.

  • По умолчанию:

  • Тип: String

Query Parameters (10 parameters)

args (producer)

  • Аргументами могут быть один или несколько токенов, разделенных пробелами.

  • По умолчанию:

  • Тип: String

binding (producer)

  • Тип: Ссылка на org.apache.commons.exec.ExecBinding в реестре.

  • По умолчанию:

  • Тип: ExecBinding

commandExecutor (producer)

  • Ссылка на org.apache.commons.exec.ExecCommandExecutor в реестре, который настраивает выполнение команд. Исполняющий модуль команд по умолчанию использует библиотеку commons-exec, которая добавляет обработчик завершения для каждой выполненной команды.

  • По умолчанию:

  • Тип: ExecCommandExecutor

commandLogLevel (producer)

  • Тип: Уровень журналирования, используемый для команд во время выполнения. Значение по умолчанию -- DEBUG. Возможные значения: TRACE, DEBUG, INFO, WARN, ERROR или OFF. (Значения перечисления ExecCommandLogLevelType).

    Значения перечисления:

    • TRACE

    • DEBUG

    • INFO

    • WARN

    • ERROR

    • OFF

  • По умолчанию: DEBUG

  • Тип: LoggingLevel

exitValues (producer)

  • Значения выхода при успешном выполнении. Если процесс завершается с другим значением, возникает исключение. Список значений выхода, разделённых запятыми. Пустой список (по умолчанию) не устанавливает ожидаемых значений выхода и отключает проверку.

  • По умолчанию:

  • Тип: String

outFile (producer)

  • Имя файла, созданного исполняемым файлом, который следует рассматривать как его выходной файл. Если outFile не задан, будет использоваться стандартный вывод (stdout) исполняемого файла.

  • По умолчанию:

  • Тип: String

timeout (producer)

  • Тип: Время ожидания (в миллисекундах), по истечении которого выполнение исполняемого файла должно быть завершено. Если выполнение не завершится в течение этого времени, компонент отправит запрос на завершение.

  • По умолчанию:

  • Тип: long

useStderrOnEmptyStdout (producer)

  • Логическое значение, указывающее, что при пустом потоке stdout этот компонент будет заполнять тело сообщения Camel потоком stderr. По умолчанию это поведение отключено (false).

  • По умолчанию: false

  • Тип: boolean

workingDir (producer)

  • Каталог, в котором должна быть выполнена команда. Если значение равно null, будет использован рабочий каталог текущего процесса.

  • По умолчанию:

  • Тип: String

lazyStartProducer (producer (advanced))

  • Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.

  • По умолчанию: false

  • Тип: boolean

Message Headers

Компонент Exec поддерживает 10 заголовков сообщений, которые перечислены ниже:

CamelExecCommandExecutable (in)

Constant: EXEC_COMMAND_EXECUTABLE (opens in a new tab)

  • Имя системной команды, которая будет выполнена. Переопределяет исполняемый файл в URI.

  • По умолчанию:

  • Тип: String

CamelExecCommandArgs (in)

Constant: EXEC_COMMAND_ARGS (opens in a new tab)

  • Аргумент(ы) командной строки для передачи исполняемому процессу. Аргумент(ы) используются буквально -- без кавычек. Переопределяет все существующие аргументы в URI.

  • По умолчанию:

  • Тип: List or String

CamelExecCommandOutFile (in)

Constant: EXEC_COMMAND_OUT_FILE (opens in a new tab)

  • Тип: Имя файла, созданного исполняемым файлом, который следует рассматривать как его выходной. Переопределяет любой существующий outFile в URI.

  • По умолчанию:

  • Тип: String

CamelExecCommandWorkingDir (in)

Constant: EXEC_COMMAND_WORKING_DIR (opens in a new tab)

  • Каталог, в котором должна быть выполнена команда. Переопределяет любой существующий workingDir в URI.

  • По умолчанию:

  • Тип: String

CamelExecCommandTimeout (in)

Constant: EXEC_COMMAND_TIMEOUT (opens in a new tab)

  • Тип: Время ожидания (в миллисекундах), по истечении которого исполняемый файл должен быть завершен. Переопределяет любое существующее время ожидания в URI.

  • По умолчанию:

  • Тип: long

CamelExecExitValues (in)

Constant: EXEC_COMMAND_EXIT_VALUES (opens in a new tab)

  • Значения выхода для успешного выполнения процесса. Переопределяют любые существующие значения выхода в URI.

  • По умолчанию:

  • Тип: String

CamelExecStderr (out)

Constant: EXEC_STDERR (opens in a new tab)

  • Тип: Значение этого заголовка указывает на стандартный поток ошибок (stderr) исполняемого файла. Если stderr не выводится, значение равно NULL.

  • По умолчанию:

  • Тип: InputStream

CamelExecExitValue (out)

Constant: EXEC_EXIT_VALUE (opens in a new tab)

  • Значение этого заголовка является значением выхода исполняемого файла. Ненулевые значения выхода обычно указывают на аварийное завершение. Обратите внимание, что значение выхода зависит от операционной системы.

  • По умолчанию:

  • Тип: int

CamelExecUseStderrOnEmptyStdout (in)

Constant: EXEC_USE_STDERR_ON_EMPTY_STDOUT (opens in a new tab)

  • Тип: Указывает, что при пустом стандартном выводе stdout этот компонент будет заполнять тело сообщения Camel потоком stderr. По умолчанию это поведение отключено (false).

  • По умолчанию:

  • Тип: boolean

CamelExecCommandLogLevel (in)

Constant: EXEC_COMMAND_LOG_LEVEL (opens in a new tab)

  • Уровень логирования, используемый для команд во время выполнения. Значение по умолчанию -- DEBUG. Возможные значения: TRACE, DEBUG, INFO, WARN, ERROR или OFF (значения перечисления LoggingLevel).

  • По умолчанию:

  • Тип: String

Usage

Message body

Если компонент получает inтело сообщения, преобразуемое в java.io.InputStream, оно используется для передачи входных данных исполняемому файлу через его стандартный ввод ( stdin). После выполнения тело сообщения (opens in a new tab) является результатом выполнения. То есть, org.apache.camel.components.exec.ExecResultэкземпляром, содержащим stdout, stderr, значение выхода и выходной файл .

Для удобства этот компонент поддерживает следующие ExecResult преобразователи типов : (opens in a new tab)

ExecResult

  • Тип: java.io.InputStream

ExecResult

  • Тип: String

ExecResult

  • По умолчанию: byte []

ExecResult

  • Тип: org.w3c.dom.Document

Если указан файл outoutFile (в конечной точке через или в заголовках сообщения через ExecBinding.EXEC_COMMAND_OUT_FILE), преобразователи вернут содержимое файла out . Если файл out не используется, этот компонент преобразует файл stdoutпроцесса в целевой тип. Подробнее см. в примерах использования (opens in a new tab) ниже.

Examples

Executing word count (Linux)

В примере ниже выполняется команда wc(word count, Linux) для подсчёта слов в файле file /usr/share/dict/words. Результат ( output ) записывается в стандартный поток вывода wc:

from("direct:exec")
.to("exec:wc?args=--words /usr/share/dict/words")
.process(new Processor() {
     public void process(Exchange exchange) throws Exception {
       // By default, the body is ExecResult instance
       assertIsInstanceOf(ExecResult.class, exchange.getIn().getBody());
       // Use the Camel Exec String type converter to convert the ExecResult to String
       // In this case, the stdout is considered as output
       String wordCountOutput = exchange.getIn().getBody(String.class);
       // do something with the word count
     }
});

Executing java

Приведенный ниже пример выполняется javaс двумя аргументами: -serverи -version, если javaнаходится в системном пути.

from("direct:exec")
.to("exec:java?args=-server -version")

Приведенный ниже пример выполняется javaс c:\tempтремя аргументами: -server, -versionи системным свойством user.name.

from("direct:exec")
.to("exec:c:/program files/jdk/bin/java?args=-server -version -Duser.name=Camel&workingDir=c:/temp")

Executing Ant scripts

В следующем примере выполняется Apache Ant (opens in a new tab) (только для Windows) с файлом сборки CamelExecBuildFile.xml, при условии, что он ant.batнаходится в системном пути и CamelExecBuildFile.xmlв текущем каталоге.

from("direct:exec")
.to("exec:ant.bat?args=-f CamelExecBuildFile.xml")

В следующем примере ant.bat команда перенаправляет свой вывод в файл CamelExecOutFile.txt with -l. Файл CamelExecOutFile.txtиспользуется в качестве выходного файла with outFile=CamelExecOutFile.txt. В примере предполагается, что ant.batфайл находится в системном пути и CamelExecBuildFile.xmlв текущем каталоге.

from("direct:exec")
.to("exec:ant.bat?args=-f CamelExecBuildFile.xml -l CamelExecOutFile.txt&outFile=CamelExecOutFile.txt")
.process(new Processor() {
     public void process(Exchange exchange) throws Exception {
        InputStream outFile = exchange.getIn().getBody(InputStream.class);
        assertIsInstanceOf(InputStream.class, outFile);
        // do something with the out file here
     }
  });

Executing echo (Windows)

Такие команды, как echoи , dirмогут быть выполнены только с помощью командного интерпретатора операционной системы. Этот пример показывает, как выполнить такую ​​команду echoв Windows.

from("direct:exec").to("exec:cmd?args=/C echo echoString")

Spring Boot Auto-Configuration

При использовании exec с Spring Boot обязательно используйте следующую зависимость Maven для поддержки автоматической настройки:

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-exec-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>

Компонент поддерживает 3 опции, которые перечислены ниже.

camel.component.exec.autowired-enabled

  • Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.

  • По умолчанию: true

  • Тип: Boolean

camel.component.exec.enabled

  • Включить ли автоматическую настройку компонента exec. По умолчанию эта функция включена.

  • По умолчанию:

  • Тип: Boolean

camel.component.exec.lazy-start-producer

  • Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.

  • По умолчанию: false

  • Тип: Boolean