Когда дело доходит до средства пакетной обработки Java EE 7, существует два способа передачи свойств / параметров в порции и пакеты. Это краткое руководство показывает вам 2 способа, которые могут очень часто использоваться при разработке пакетной обработки в Java EE 7.
1. Предварительно определенные свойства / параметры перед временем выполнения
Предварительно определенные свойства — это свойства (пары имя-значение), которые вы определяете перед развертыванием приложения. Другими словами, он фиксированный и статический, а не динамический, и значения всегда будут оставаться неизменными при его извлечении. Это делается с помощью XML-файла дескриптора задания, который находится, например, в META-INF / batch-jobs / demo-job.xml . Например:
|
01
02
03
04
05
06
07
08
09
10
|
<?xml version="1.0" encoding="UTF-8"?> version="1.0"> <properties> <property name="staticParamName1" value="staticParamValue1" /> <property name="staticParamName2" value="staticParamValue2" /> </properties> <!-- Then, the rest of the steps definition --></job> |
Все, что для этого нужно, — это поместить каждое предопределенное свойство в тег <properties /> . После развертывания приложения эти свойства будут доступны для объектов ItemReader, ItemProcessor, ItemWriter и Batchlet, определенных в файле XML, во время выполнения.
Вот пример того, как получить предопределенные свойства / параметры во время выполнения.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
@Dependent@Named( "DemoReader" )public class DemoReader extends AbstractItemReader { @Inject private JobContext jobCtx; @Override public void open( Serializable ckpt ) throws Exception { // Retrieve the value of staticParamName1 defined in job descriptor XML String staticParamValue1 = jobCtx.getProperties().getProperty( "staticParamName1" ); // The rest of the implementation } // The rest of the overridden methods} |
Обратной стороной этого является то, что значение свойств всегда будет оставаться неизменным на протяжении всего времени выполнения. Если вам нужно передать динамическое значение объектам пакетного шага, читайте дальше …
2. Передача свойств / параметров динамически во время выполнения
Есть ситуации, когда динамические свойства / значения параметров желательны во время пакетного запуска. Для этого сначала нужно определить свойства / параметры и передать оператору задания пакетное задание.
Например, у меня есть JobOperator (Singleton EJB), который запускает пакетное задание через метод runBatchJob () с двумя динамическими свойствами / параметрами, которые передаются объектам пакетного задания:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
@Singletonpublic class BatchJobOperator implements Serializable { public void runBatchJob() { Properties runtimeParameters = new Properties(); runtimeParameters.setProperty( "dynamicPropertyName1", "dynamicPropertyValue1" ); runtimeParameters.setProperty( "dynamicPropertyName2", "dynamicPropertyValue2" ); JobOperator jo = BatchRuntime.getJobOperator(); // Run the batch job with the runtimeParameters passed jo.start( "name-of-job-xml-file-without-dot-xml", runtimeParameters ); }} |
Однажды, когда на сервере приложений выполняются задания, объекты, задействованные в задании (ItemReader, ItemProcessor, ItemsWriter и Batchlet), могут получить свойства, установленные в runtimeParameters , но другим способом. Вот как это сделать в ItemReader (то же самое относится и к остальным объектам шага пакетного задания):
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
@Dependent@Named( "DemoReader" )public class DemoReader extends AbstractItemReader { @Inject private JobContext jobCtx; @Override public void open( Serializable ckpt ) throws Exception { // Here's how to retrieve dynamic runtime properties / parameters Properties runtimeParams = BatchRuntime.getJobOperator().getParameters( jobCtx.getExecutionId() ); String dynamicPropertyValue1 = runtimeParams.getProperty( "dynamicPropertyName1" ); String dynamicPropertyValue2 = runtimeParams.getProperty( "dynamicPropertyName2" ); // The rest of the implementation } // The rest of the overridden methods} |
Обратите внимание, что вместо получения свойств из JobContext свойства, определенные в динамической среде выполнения, должны быть получены из JobOperator BatchRuntime путем передачи идентификатора выполнения контекста задания.
Надеюсь, это полезно.
| Ссылка: | 2 Пути передачи свойств / параметров в Java EE 7 Пакет от нашего партнера по JCG Макса Лэма в блоге разработчика Scrappad . |