Step

Step é uma unidade de trabalho dentro de um Job. É como uma "etapa" ou "fase" do Job que executa uma tarefa específica e independente.

Cada Job é composto por um ou mais Steps, permitindo que o Job seja dividido em etapas menores e mais gerenciáveis. Isso permite organizar, modularizar e reutilizar processos facilmente.

Além de definir o tipo de processamento, o Spring Batch oferece diversas funcionalidades para Steps:

  • Controle de Fluxo e Condicional:

    • Os Steps podem ter fluxos condicionais para definir a sequência de execução. Por exemplo, dependendo do resultado de um Step (completo, falha, erro), o Job pode seguir para diferentes Steps subsequentes.

  • Tratamento de Exceções:

    • É possível configurar o Step para ignorar ou repetir uma execução em caso de erros específicos. Por exemplo, você pode ignorar exceções durante a leitura ou gravação de dados em certos casos.

  • Reinício e Recuperação:

    • Cada Step possui um controle de execução que permite retomar o Job a partir de um Step específico em caso de falhas, sem precisar reexecutar todos os Steps.

  • Listeners:

    • Pode-se adicionar listeners para monitorar o ciclo de vida do Step, como executar ações antes de iniciar, depois de concluir ou em caso de erros. Isso facilita o monitoramento e permite realizar ações adicionais baseadas no status de execução.

@Bean
public Step exemploStepCompleto() {
    return stepBuilderFactory.get("exemploStepCompleto")
            .<String, String>chunk(10)
            .reader(itemReader())
            .processor(itemProcessor())
            .writer(itemWriter())
            .faultTolerant() // Permite configurar tolerância a falhas
            .skipLimit(5) // Ignora até 5 erros
            .skip(MyCustomException.class) // Ignora exceções específicas
            .listener(new StepExecutionListener() {
                @Override
                public void beforeStep(StepExecution stepExecution) {
                    System.out.println("Step iniciando...");
                }

                @Override
                public ExitStatus afterStep(StepExecution stepExecution) {
                    System.out.println("Step finalizado!");
                    return ExitStatus.COMPLETED;
                }
            })
            .build();
}

Atualizado