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