Spring Batch é uma estrutura de lote leve e abrangente, projetada para permitir o desenvolvimento de aplicativos em lote robustos, vitais para as operações diárias de sistemas corporativos. O Spring Batch baseia-se na produtividade, na abordagem de desenvolvimento baseada em POJO e nos recursos gerais de facilidade de uso que as pessoas conheceram no Spring Framework, ao mesmo tempo que facilita o acesso e o aproveitamento de serviços corporativos mais avançados para os desenvolvedores quando necessário.
Se você estiver procurando uma ferramenta de orquestração de tempo de execução para seus aplicativos Batch ou precisar de um console de gerenciamento para visualizar as execuções atuais e históricas, dê uma olhada no Spring Cloud Data Flow. É uma ferramenta de orquestração para implantar e executar microsserviços baseados em integração de dados, incluindo aplicativos Spring Batch.
Este tutorial rápido mostra como configurar um projeto mínimo para executar um trabalho em lote simples com Spring Batch.
Em seu IDE favorito, crie um novo projeto Java 17+ baseado em Maven e adicione as seguintes dependências:
< 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 >
Em seguida, crie uma classe de configuração para definir a fonte de dados e o gerenciador de transações que serão utilizados pelo repositório de jobs:
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 );
}
}
Neste tutorial, um banco de dados HSQLDB incorporado é criado e inicializado com tabelas de metadados do Spring Batch.
Por fim, crie uma classe para definir o trabalho em lote:
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 ());
}
}
O trabalho neste tutorial é composto por uma única etapa que imprime "Olá, mundo!" para a saída padrão.
Agora você pode executar o método main
da classe HelloWorldJobConfiguration
para iniciar o trabalho. A saída deve ser semelhante à seguinte:
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
Este guia é um tutorial mais realista que mostra um trabalho em lote ETL típico que lê dados de um arquivo simples, transforma-os e grava-os em um banco de dados relacional. É um projeto Spring Batch baseado no Spring Boot. Você encontra o Guia de primeiros passos aqui: Criando um serviço em lote.
Você pode encontrar vários exemplos para experimentar aqui: Spring Batch Samples.
Se você tiver alguma dúvida ou solicitação de suporte, abra uma nova discussão nas discussões do GitHub ou faça uma pergunta no StackOverflow.
Não crie problemas no Issue Tracker para perguntas ou solicitações de suporte. Gostaríamos de manter o rastreador de problemas exclusivamente para relatórios de bugs e solicitações de recursos.
Spring Batch usa GitHub Issues para registrar bugs e solicitações de recursos. Se você quiser levantar um problema, siga as recomendações abaixo:
Para bugs não triviais, crie um caso de teste ou projeto que replique o problema e anexe-o ao problema, conforme detalhado nas Diretrizes para relatar problemas.
Por favor, consulte nossa política de segurança.
Clone o repositório git usando a URL na página inicial do Github:
$ git clone [email protected]:spring-projects/spring-batch.git
$ cd spring-batch
Maven é a ferramenta de construção usada para Spring Batch. Você pode construir o projeto com o seguinte comando:
$ ./mvnw package
Se você deseja realizar uma compilação completa com todos os testes de integração, execute:
$ ./mvnw verify
Observe que alguns testes de integração são baseados no Docker, portanto, certifique-se de ter o Docker instalado e funcionando antes de executar uma compilação completa.
Para gerar a documentação de referência, execute os seguintes comandos:
$ cd spring-batch-docs
$ ../mvnw antora:antora
A documentação de referência pode ser encontrada em spring-batch-docs/target/anotra/site
.
Se quiser construir o projeto em um contêiner Docker, você pode proceder da seguinte forma:
$> docker run -it --mount type=bind,source="$(pwd)",target=/spring-batch maven:3-openjdk-17 bash
#> cd spring-batch
#> ./mvnw package
Isso montará o código-fonte que você clonou anteriormente no host dentro do contêiner. Se quiser trabalhar em uma cópia do código-fonte dentro do contêiner (sem efeitos colaterais no host), você pode proceder da seguinte forma:
$> docker run -it maven:3-openjdk-17 bash
#> git clone https://github.com/spring-projects/spring-batch.git
#> cd spring-batch
#> ./mvnw package
Aceitamos contribuições de qualquer tipo! Aqui estão algumas maneiras de você contribuir com o projeto:
Antes de aceitarmos solicitações pull, precisaremos que você assine o contrato do contribuidor. Assinar o acordo do contribuidor não concede a ninguém direitos de commit no repositório principal, mas significa que podemos aceitar suas contribuições, e você receberá um crédito de autor se o fizermos. Contribuidores ativos podem ser convidados a ingressar na equipe principal e ter a capacidade de mesclar solicitações pull.
Consulte nosso código de conduta.
Spring Batch é um software de código aberto lançado sob a licença Apache 2.0.