Spring Batch — это легкая комплексная пакетная среда, предназначенная для разработки надежных пакетных приложений, жизненно важных для повседневной работы корпоративных систем. Spring Batch опирается на производительность, подход к разработке на основе POJO и общие возможности простоты использования, которые люди узнали из Spring Framework, одновременно упрощая разработчикам доступ и использование более продвинутых корпоративных сервисов, когда это необходимо.
Если вы ищете инструмент оркестрации среды выполнения для своих пакетных приложений или вам нужна консоль управления для просмотра текущих и исторических выполнений, обратите внимание на Spring Cloud Data Flow. Это инструмент оркестрации для развертывания и выполнения микросервисов на основе интеграции данных, включая приложения Spring Batch.
В этом кратком руководстве показано, как настроить минимальный проект для запуска простого пакетного задания с помощью Spring Batch.
В вашей любимой IDE создайте новый проект Java 17+ на базе Maven и добавьте следующие зависимости:
< dependencies >
< dependency >
< groupId >org.springframework.batch</ groupId >
< artifactId >spring-batch-core</ artifactId >
< version >${LATEST_VERSION}</ version >
</ dependency >
< dependency >
< groupId >org.hsqldb</ groupId >
< artifactId >hsqldb</ artifactId >
< version >${LATEST_VERSION}</ version >
< scope >runtime</ scope >
</ dependency >
</ dependencies >
Затем создайте класс конфигурации, чтобы определить источник данных и менеджер транзакций, которые будут использоваться репозиторием заданий:
import javax . sql . DataSource ;
import org . springframework . context . annotation . Bean ;
import org . springframework . context . annotation . Configuration ;
import org . springframework . jdbc . support . JdbcTransactionManager ;
import org . springframework . jdbc . datasource . embedded . EmbeddedDatabaseBuilder ;
@ Configuration
public class DataSourceConfiguration {
@ Bean
public DataSource dataSource () {
return new EmbeddedDatabaseBuilder ()
. addScript ( "/org/springframework/batch/core/schema-hsqldb.sql" )
. build ();
}
@ Bean
public JdbcTransactionManager transactionManager ( DataSource dataSource ) {
return new JdbcTransactionManager ( dataSource );
}
}
В этом руководстве встроенная база данных HSQLDB создается и инициализируется с помощью таблиц метаданных Spring Batch.
Наконец, создайте класс для определения пакетного задания:
import org . springframework . batch . core . Job ;
import org . springframework . batch . core . JobParameters ;
import org . springframework . batch . core . Step ;
import org . springframework . batch . core . configuration . annotation . EnableBatchProcessing ;
import org . springframework . batch . core . job . builder . JobBuilder ;
import org . springframework . batch . core . launch . JobLauncher ;
import org . springframework . batch . core . repository . JobRepository ;
import org . springframework . batch . core . step . builder . StepBuilder ;
import org . springframework . batch . repeat . RepeatStatus ;
import org . springframework . context . ApplicationContext ;
import org . springframework . context . annotation . AnnotationConfigApplicationContext ;
import org . springframework . context . annotation . Bean ;
import org . springframework . context . annotation . Configuration ;
import org . springframework . context . annotation . Import ;
import org . springframework . jdbc . support . JdbcTransactionManager ;
@ Configuration
@ EnableBatchProcessing
@ Import ( DataSourceConfiguration . class )
public class HelloWorldJobConfiguration {
@ Bean
public Step step ( JobRepository jobRepository , JdbcTransactionManager transactionManager ) {
return new StepBuilder ( "step" , jobRepository ). tasklet (( contribution , chunkContext ) -> {
System . out . println ( "Hello world!" );
return RepeatStatus . FINISHED ;
}, transactionManager ). build ();
}
@ Bean
public Job job ( JobRepository jobRepository , Step step ) {
return new JobBuilder ( "job" , jobRepository ). start ( step ). build ();
}
public static void main ( String [] args ) throws Exception {
ApplicationContext context = new AnnotationConfigApplicationContext ( HelloWorldJobConfiguration . class );
JobLauncher jobLauncher = context . getBean ( JobLauncher . class );
Job job = context . getBean ( Job . class );
jobLauncher . run ( job , new JobParameters ());
}
}
Задание в этом руководстве состоит из одного шага, который печатает «Hello world!» на стандартный вывод.
Теперь вы можете запустить main
метод класса HelloWorldJobConfiguration
, чтобы запустить задание. Вывод должен быть похож на следующий:
INFO: Finished Spring Batch infrastructure beans configuration in 8 ms.
INFO: Starting embedded database: url='jdbc:hsqldb:mem:testdb', username='sa'
INFO: No database type set, using meta data indicating: HSQL
INFO: No Micrometer observation registry found, defaulting to ObservationRegistry.NOOP
INFO: No TaskExecutor has been set, defaulting to synchronous executor.
INFO: Job: [SimpleJob: [name=job]] launched with the following parameters: [{}]
INFO: Executing step: [step]
Hello world!
INFO: Step: [step] executed in 10ms
INFO: Job: [SimpleJob: [name=job]] completed with the following parameters: [{}] and the following status: [COMPLETED] in 25ms
Это руководство представляет собой более реалистичное руководство, в котором показано типичное пакетное задание ETL, которое считывает данные из плоского файла, преобразует их и записывает в реляционную базу данных. Это проект Spring Batch, основанный на Spring Boot. Руководство по началу работы вы найдете здесь: Создание пакетной службы.
Вы можете найти несколько образцов, которые можно попробовать, здесь: Образцы весенних партий.
Если у вас есть вопрос или запрос на поддержку, откройте новое обсуждение в обсуждениях GitHub или задайте вопрос на StackOverflow.
Пожалуйста, не создавайте проблемы в системе отслеживания проблем для вопросов или запросов в службу поддержки. Мы хотели бы сохранить систему отслеживания проблем исключительно для отчетов об ошибках и запросов функций.
Spring Batch использует GitHub Issues для записи ошибок и запросов функций. Если вы хотите поднять проблему, следуйте приведенным ниже рекомендациям:
Для нетривиальных ошибок создайте тестовый пример или проект, воспроизводящий проблему, и прикрепите его к проблеме, как подробно описано в Руководстве по отчетности о проблемах.
Пожалуйста, ознакомьтесь с нашей Политикой безопасности.
Клонируйте репозиторий git, используя URL-адрес на домашней странице Github:
$ git clone [email protected]:spring-projects/spring-batch.git
$ cd spring-batch
Maven — это инструмент сборки, используемый для Spring Batch. Вы можете собрать проект с помощью следующей команды:
$ ./mvnw package
Если вы хотите выполнить полную сборку со всеми интеграционными тестами, запустите:
$ ./mvnw verify
Обратите внимание, что некоторые интеграционные тесты основаны на Docker, поэтому перед запуском полной сборки убедитесь, что Docker запущен и работает.
Чтобы создать справочную документацию, выполните следующие команды:
$ cd spring-batch-docs
$ ../mvnw antora:antora
Справочную документацию можно найти в spring-batch-docs/target/anotra/site
.
Если вы хотите собрать проект в Docker-контейнере, вы можете поступить следующим образом:
$> docker run -it --mount type=bind,source="$(pwd)",target=/spring-batch maven:3-openjdk-17 bash
#> cd spring-batch
#> ./mvnw package
Это позволит смонтировать исходный код, который вы ранее клонировали, на хосте внутри контейнера. Если вы хотите работать с копией исходного кода внутри контейнера (без побочных эффектов на хосте), вы можете поступить следующим образом:
$> docker run -it maven:3-openjdk-17 bash
#> git clone https://github.com/spring-projects/spring-batch.git
#> cd spring-batch
#> ./mvnw package
Мы приветствуем вклады в любом виде! Вот несколько способов внести свой вклад в проект:
Прежде чем мы примем запросы на включение, нам нужно, чтобы вы подписали соглашение участника. Подписание соглашения участника не дает никому права использовать основной репозиторий, но это означает, что мы можем принять ваши вклады, и если мы это сделаем, вы получите признание автора. Активных участников могут попросить присоединиться к основной команде и предоставить им возможность объединять запросы на включение.
Пожалуйста, ознакомьтесь с нашим кодексом поведения.
Spring Batch — это программное обеспечение с открытым исходным кодом, выпущенное под лицензией Apache 2.0.