Эта статья была изначально написана Майклом Минеллой из SpringSource
Сегодня мы рады объявить о первом выпуске новой версии Spring Batch 3.0 ( скачать ). В этом выпуске мы делаем первые шаги к реализации спецификации JSR-352 Java Batch. Spring Batch — это легкая, комплексная среда для разработки надежных пакетных приложений.
JSR-352
JSR-352 считается стандартом пакетной обработки для платформы Java. В рамках этой стандартизации этот JSR включает три основных компонента:
- DSL на основе XML для настройки заданий
- API для создания компонентов, связанных с работой (читатели / писатели / и т. Д.)
- API и описание поведения для поддерживающих классов и понятий
Spring вложил много времени и ресурсов в наш вклад в эту спецификацию. Наше сотрудничество с другими отраслевыми экспертами через JCP, JSR-352 подтверждает, что образцы пакетов, которые Spring Batch реализовал и испытал в бою за последние пять лет в бесчисленных производственных средах, являются лучшим подходом для создания критически важных пакетных приложений.
ОСОБЕННОСТИ В вехе 1
Этот выпуск — первый шаг к совместимости Spring Batch с JSR. Из 155 тестов SE в JSR-352 TCK этот выпуск прошел 70. В этом выпуске реализованы следующие особенности:
JobOperator
реализация- Базовая конфигурация задания через XML
- поддержка batch.xml
JOBOPERATOR
JSR определяет JobOperator
интерфейс, который является комбинацией Spring Batch JobOperator
и JobExplorer
интерфейсов. Для спецификации этот интерфейс служит точкой входа для пакетного приложения для взаимодействия как с самим заданием (запуск / останов / перезапуск / и т. Д.), Так и с хранилищем заданий (например, предоставляя возможность запрашивать ранее выполненный JobExecutions) , Из-за этого JobOperator
необходимо предоставлять уровень услуг из коробки. JsrJobOperator
(Реализация Родника javax.batch.operations.JobOperator
) бутстрэпы контекста Spring , подобный @EnableBatchProcessing
. Из коробки, она включает в себя JobRepository
, JobLauncher
, JobOperator
, JobExplorer
, DataSource
, TransactionManager
, ParametersConverter
, JobRegistry
, а такжеPlaceholderPropertiesConfigurer
, Все они могут быть переопределены во время выполнения путем переопределения bean-компонентов по умолчанию через контекст, предоставленный при запуске или перезапуске задания. По умолчанию JobRepository
используется HSQLDB в конфигурации в памяти.
Согласно JSR, начать работу на самом деле очень просто:
JobOperator jobOperator = BatchRuntime.getJobOperator(); JobExecution jobExecution = jobOperator.start("jsrJob", new Properties());
Две вышеупомянутые строки загрузят ранее определенный базовый контекст (это происходит только один раз), затем загрузят файл batch.xml из / META-INF (если он существует) и контекст, определенный в jsrJob.xml в / META-INF / пакетные рабочие места. jsrJob.xml может быть одной из двух конфигураций. Это может быть стандартная конфигурация контекста Spring, которая определяет любые пакетные артефакты как Spring Beans и задание через DSL JSR-352, или это может быть просто определение задания, как определено JSR. Согласно JSR-352 в контексте jsrJob.xml может быть определено только одно задание. Остальные JsrJobOperator
функциональные возможности — это фактически прямая упаковка существующих JobOperator
и JobExplorer
функциональных возможностей (следовательно, их включение в контекст базового приложения).
ОСНОВНАЯ КОНФИГУРАЦИЯ РАБОТЫ С XML
JSR-352 определяет DSL на основе XML, который любой пользователь Spring Batch сразу найдет знакомым. Состоит из заданий, шагов, читателей и авторов, большинство концепций, которые находятся в пространстве имен Spring Batch, учитываются в JSR-352. В рамках этого выпуска разработчики смогут настраивать базовые задания, используя DSL, определенный JSR. Основные работы включают в себя следующее:
<job>
<step>
<chunk>
<batchlet>
<reader>
<processor>
<writer>
<decision>
<listeners>
/<listener>
<properties>
/<property>
<skippable-exception-classes>
и родственные дети<retryable-exception-classes>
и родственные дети<checkpoint-algorithm>
<next>
/<end>
/<stop>
/<fail>
С JSR, пакетное задание, которое выглядит следующим образом через Spring Batch DSL:
<job id="data" xmlns="http://www.springframework.org/schema/batch"> <step id="import" next="report"> <tasklet> <chunk commit-interval="100" reader="itemReader" writer="dataWriter" /> </tasklet> </step> <step id="report"> <tasklet ref="reportTasklet"/> </step> </job>
будет выглядеть так:
<job id="data" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0"> <step id="import" next="report"> <chunk item-count="100"> <reader ref="itemReader"/> <writer ref="dataWriter"/> </chunk> </step> <step id="report"> <batchlet ref="reportBatchlet"/> </step> </job>
Основными функциями, не включенными в этот выпуск с точки зрения конфигурации, являются параметры параллельного выполнения, включая разбиение и разбиение.
Чтобы настроить задание с помощью DSL JSR, разработчик может либо встроить конфигурацию в контекст Spring, либо настроить ее с помощью отдельного XML-документа, как показано выше. В приведенном выше определении задания, поскольку пакетный отчет reportBatchlet не определен как bean-компонент в том же XML-файле, его необходимо разрешить куда-нибудь…
BATCH.XML
JSR-352 не требует использования структуры внедрения зависимостей. Тем не менее, есть ряд функций, связанных с DI, от которых зависит спецификация. Первый — это создание заданий через DSL со ссылкой на именованные пакетные артефакты. В приведенном выше примере reportBatchlet может ссылаться на одну из двух вещей: либо bean-компонент Spring, определенный в контексте, связанном с этим файлом, либо пакетный артефакт, определенный в файле batch.xml, расположенном в каталоге / META-INF приложения. Файл batch.xml предоставляет очень простой метод определения имени для пары имен классов. Пример файла batch.xml, который обращается к описанному выше случаю, будет выглядеть примерно так:
<?xml version="1.0" encoding="UTF-8"?> <batch-artifacts xmlns="http://xmlns.jcp.org/xml/ns/javaee"> <ref id="reportBatchlet" class="org.springframework.batch.core.jsr.step.batchlet.BatchletSupport"/> </batch-artifacts>
Хотя версия 3.0.0.M1 поддерживает требование batch.xml, пользователям рекомендуется использовать вместо этого конфигурации контекста Spring из-за более надежного внедрения зависимостей и параметров фабрики компонентов.
Будущие выпуски будут включать полную поддержку всего языка выражений, определенного в JSR-352.
BEYOND JSR-352
Хотя JSR-352 определяет основу для создания пакетных приложений, аналогичную той, которую уже предоставляет Spring Batch, важно отметить, что Spring Batch идет намного дальше, чем определено в JSR-352. Например, хотя JSR определяет API для создания пакетных артефактов, таких как ItemReaders и ItemWriters, он не предоставляет никаких реализаций. Spring Batch предоставляет обширную библиотеку реализаций, которую можно использовать практически без необходимости настройки. Мало того, что использование этих готовых компонентов делает вас более продуктивными, это дает вам представление о том, что вы используете компоненты, протестированные в самых требовательных производственных средах.
Spring Batch также значительно продвигает пакетную обработку по сравнению с тем, что описывает JSR-352. Spring Batch предоставляет платформу для простого создания масштабируемых пакетных приложений. Посредством удаленного разделения и удаленного разделения приложения Spring Batch можно масштабировать по нескольким JVM в стандартизированном и удобном виде. Добавление Spring Integration в ваше пакетное решение предоставляет такие возможности, как запуск заданий на основе сообщений, опрос файлов, загрузка / выгрузка и многое другое.
Наконец, Spring Batch расширяет границы того, что делают пакетные задания и где запускаются пакетные задания. Spring Data для Apache Hadoop предоставляет компоненты для запуска заданий Map / Reduce, Hive, Pig и т. Д. При использовании Spring Batch в качестве инструмента оркестровки. В ближайшие месяцы мы выпустим инструменты, позволяющие запускать задания Spring Batch на кластерах Hadoop через Yarn. Все вышеперечисленное может быть включено в Spring XD, который стирает границы между Spring Batch, Spring Integration и Spring Data, предоставляя единую систему для приема данных, анализа в реальном времени, пакетной обработки и экспорта данных.
ВЫВОД
Spring сделал большие инвестиции в JSR-352 и занимается внедрением в Spring Batch. Этот выпуск представляет собой наши постоянные инвестиции в этот JSR, поскольку мы делаем первые шаги к тому, чтобы быть совместимыми с JSR-352. Мы с нетерпением ждем ваших отзывов на форумах, Jira и лично на SpringOne2GX !