Что такое контекстные переменные Spring Batch по умолчанию?

В Spring Batch step-scope< /em> документации, есть три необъяснимых карты контекста spring-batch: jobParameters, jobExecutionContext и stepExecutionContext.

Пример кода Springsource, объединенный:

<bean id="flatFileItemReader" scope="step"
  class="org.springframework.batch.item.file.FlatFileItemReader">
    <property name="var1" value="#{jobParameters['input.file.name']}" />
    <property name="var2" value="#{jobExecutionContext['input.file.name']}" />
    <property name="var3" value="#{stepExecutionContext['input.file.name']}" />
</bean>

Какие параметры по умолчанию доступны в jobParameters, jobExecutionContext и stepExecutionContext?

Существуют также вероятные различия между тем, что доступно в Spring Batch версии 1.x, 2.x и 3.x — документации в этой области довольно мало.


person JJ Zabkar    schedule 05.03.2014    source источник


Ответы (3)


#{jobParameters}, #{jobExecutionContext} и #{stepExecutionContext} являются аналогом spEL (язык выражений Spring) Параметры задания, Выполнение задания и объекты StepExecution доступно в поздней привязке, чтобы разрешить нестатический доступ к этим значениям объектов из объекта с пошаговой областью действия.

Они поддерживают доступ как Maps, поэтому вы можете получить доступ к ExecutionContext связан с JobExecution и StepExecution, а значения хранятся в JobParameters.

Также ознакомьтесь с документацией StepScope. Дополнительная информация.

person Luca Basso Ricci    schedule 05.03.2014

Нет никаких значений по умолчанию. Думайте о jobParameters, jobExecutionContext и stepExecutionContext как о прославленных Map с вспомогательными методами для различных примитивных типов данных, например. getInt(). Обычно к ним обращаются из объектов StepExecution и JobExecution, переданных в *ExecutionListeners, или путем внедрения с использованием внедрения значения, например. @Value("#{jobParameters['foo']}").

В этом случае input.file.name — это просто имя, выбранное разработчиком, например. может соответствовать параметру задания командной строки, указанному в файле CommandLineJobRunner.

person Emerson Farrugia    schedule 05.03.2014
comment
Просто для уточнения: чтобы добавить пользовательские переменные в мой StepExecution в области step, я расширил StepExecution и создал экземпляр MyStepExecution на этапе разделения Spring Batch. Параметры уровня задания оказались не нужны. - person JJ Zabkar; 18.03.2014
comment
Итак, добавление ваших пользовательских переменных в StepExecution.getExecutionContext() не сработало? Это обычный способ сделать это. Принятый ответ на этот вопрос показывает пример: для stepexecutioncontext не работает"> stackoverflow.com/questions/18830994/ - person Emerson Farrugia; 18.03.2014
comment
Да, это сработало, но мне не нравилась его проверяемость — слишком много String махинаций; менее смысловой. Мне нравились декларативные геттеры. - person JJ Zabkar; 18.03.2014
comment
Ах хорошо. Причина для этих конкретных типов данных заключается в том, что они легко сохраняются в clob SERIALIZED_CONTEXT таблицы BATCH_STEP_EXECUTION_CONTEXT в схеме Spring Batch RDBMS. (docs.spring.io/spring-batch/reference/html/metaDataSchema .html) Будьте осторожны, чтобы ваши настройки не потерялись при возобновлении невыполненных заданий. - person Emerson Farrugia; 19.03.2014

См. документацию.

JobParameters — это параметры, которые передаются при запуске задания.

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

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

person Gary Russell    schedule 05.03.2014