É muito comum ocorrerem falhas durante a execução de uma rotina batch. Algumas falhas de fato devem interromper a execução do batch, mas se a falha for algo intermitente talvez seja necessário apenas tentar realizar a operação novamente para ver se a falha ainda ocorre. Isso pode ser feito através da configuração de uma política de retry.

Para explicar como esse mecanismo de retry funciona e como ele pode ser útil, considere o exemplo de um job de migração de dados, que lê dados de um arquivo e carrega-os no banco de dados. …


Desempenho tem sido um requisito muito desejado para os sistemas que desenvolvemos atualmente. É bastante comum, por exemplo, utilizar cache em consultas realizadas em bases de dados enormes, para obter um tempo de resposta adequado ao usuário. Nesse contexto, o Redis é uma alternativa bastante atraente para lidar com cache, já que é rápido, leve, e gratuito. Mas como podemos carregar esse cache de forma otimizada?

Uma alternativa seria o uso do Spring Batch. Ele é o framework ideal para carregar um grande volume de dados em um curto espaço de tempo. …


A Injeção de dependências é uma técnica que surgiu para resolver um problema comum no desenvolvimento de sistemas: o alto acoplamento. Para que você entenda o que é esse problema e porque é tão importante evitá-lo, vamos analisar um serviço de consulta de usuários:

Esse serviço realiza uma tarefa simples: ele consulta usuários em um arquivo. Um desenvolvedor menos experiente estaria bastante satisfeito com essa implementação, afinal, o serviço funciona. Mas, existem alguns problemas com essa abordagem.

Da forma como foi implementado, o serviço é capaz de buscar usuários apenas de um arquivo. Se for necessário modificar essa busca…


Testes são cruciais para garantir que mudanças no software sejam feitas de forma mais segura e ágil. Quando falamos em testes de integração, estamos garantindo que as conexões entre as unidades de software funcionam adequadamente, e para o Spring Batch isso é essencial. Podemos testar jobs, steps, leitores, enfim, vários componentes do framework considerando a sua relevância na lógica de processamento. Para fazer isso, podemos utilizar o Spring Boot ao nosso favor, pois ele já fornece alguns componentes que visam facilitar esses testes.

Esse post é baseado principalmente neste livro, que contém as orientações mais atuais em 2019 sobre o…


Quando criamos sistemas batch, muitas vezes nos deparamos com uma lógica que é muito complexa para ser mantida num único job. Para resolver esse problema, poderíamos externalizar parte dessa lógica em outro job separando bem as responsabilidades e facilitando a manutenção do código. Mas como faríamos para invocar um job dentro do outro?

Uma alternativa seria utilizar o JobStep, que permite que configuremos um step responsável por invocar outro job:

Nesse exemplo, o jobStepJobStep1 invoca o job como se ele fosse um step! Essa solução é ideal para casos mais simples, quando precisamos apenas invocar um job dentro do…


Se você trabalha com Spring Batch, já deve ter se deparado com a dificuldade em definir o intervalo de commit de um job. Ou talvez você simplesmente utilize um valor padrão, mas se esse for o caso, você pode estar comprometendo o desempenho dos seus jobs e a sua capacidade de escalar.

Tendo isso em mente, qual seria o melhor intervalo de commit para um job? A resposta é: depende.

Existem vários pontos que você precisa considerar ao definir o intervalo de commit de um job. Dentre eles, destaco o tempo de execução, uso de memória, e capacidade de…


O Spring Batch é um framework robusto para a construção de jobs. Por ser basicamente uma máquina de estados, a base do seu funcionamento gira em torno do que chamamos de metadados. Esse artigo irá discutir o que são esses metadados e como utilizá-los para compreender o estado de um job Spring Batch.

JobRepository

Os metadados de um job descrevem o seu fluxo de execução completo. Eles incluem o histórico de execuções, falhas, número de escritas e leituras de registros, etc. Esses dados são armazenados num componente chamado JobRepository. O Spring Batch permite que esses dados sejam mantidos em memória…


Quando o número de registros processados pelo job é muito grande, utilizar uma única thread pode não ser suficiente para atingir a janela de processamento definida. Pensando nisso, o Spring Batch provê algumas alternativas para escalar o job, que iremos discutir nesse post.

Abordagens numa única JVM

  • Step multithread: A ideia aqui é, tendo um chunk que possui um tamanho definido, processar esses chunks em paralelo dentro do step. Por exemplo, se houverem 10000 registros a serem processados e o chunk for de tamanho 100, eu vou precisar de 100 chunks para processar todos os registros. Nesse caso, podemos definir que serão usadas…


Validação é uma etapa importante no processamento batch. Ela pode ser utilizada para garantir a integridade do item lido para a etapa de escrita. O problema é quando temos uma lógica de validação complexa. Se o desenvolvedor não for muito experiente, ele pode implementar uma lógica com várias responsabilidades concentradas num único componente de processamento.

Felizmente, o Spring Batch provê um componente chamado CompositeItemProcessor, que permite encadear vários processadores, e assim manter as responsabilidades separadas entre eles.

Para entender como ele funciona, vamos pensar no cenário em que precisamos criar um job que realiza a leitura de um…


Ler arquivos é uma funcionalidade comum em sistemas batch. O Spring Batch disponibiliza implementações out-of-the-box para realizar essa tarefa, considerando os formatos mais comuns de arquivos: delimitados e de largura fixa.

O problema é que muitas vezes não temos o controle da geração do arquivo a ser lido, e por isso encontramos arquivos com formatos incomuns, como o do exemplo abaixo:

O arquivo possui uma lista de itens na mesma linha! Num cenário em que não é permitido modificar o conteúdo do arquivo para a leitura, utilizar o leitor padrão de arquivos delimitados do Spring Batch não seria suficiente…

Giuliana Bezerra

Software Architect at Dataprev — Instructor at Udemy

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store