Когда дело доходит до средства пакетной обработки 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
|
@Singleton public 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 . |