/ Limite de novas tentativas de lotes de mola - mola, lote de mola

Limite de novas tentativas de lote de mola - mola, lote de mola

Ao definir um trabalho em lote de mola e usarparâmetro retry-limit na descrição xml é o número total de execuções ou o número de tentativas? ou seja, quando limite de tentativas = 1, meu trabalho será executado uma ou duas vezes (em caso de erro na primeira execução)?

Isso parece uma pergunta boba, mas eu não encontrei uma resposta clara em qualquer documentação que eu tenha visto ...

Respostas:

2 para resposta № 1

o retry-limit atributo é realmente "baseado em item" e não"baseado em trabalho". Por "baseado em item", quero dizer que para cada item (registro / linha) que é lido / processado / escrito, se esse item falhar, será repetido o limite de novas tentativas. Se esse limite for atingido, o degrau vai falhar.

Por exemplo

<step id="someStep">
<tasklet>
<chunk reader="itemReader" writer="itemWriter"
processor="itemProcessor" commit-interval="20"
retry-limit="3">
<retryable-exception-classes>
<include class="org.springframework.exception.SomeException"/>
</retryable-exception-classes>
</chunk>
</tasklet>
</step>

Na configuração básica da etapa acima, quando um SomeException é lançado por qualquer um dos componentes da etapa (itemReader, itemWriterou itemProcessor), o item é repetido até três vezes antes de o passo falhar.


Aqui está a explicação do doc da Primavera

Na maioria dos casos, você deseja que uma exceção cause uma falha de ignorar ou de Etapa. No entanto, nem todas as exceções são determinísticas. Se um FlatFileParseException é encontrado durante a leitura, sempre será lançado para esse registro; redefinindo o ItemReader não vai ajudar. Entretanto, para outras exceções, como DeadlockLoserDataAccessException, o que indica que o processo atualtentou atualizar um registro em que outro processo bloqueia, aguardar e tentar novamente pode resultar em sucesso. Nesse caso, a nova tentativa deve ser configurada:

<step id="step1">
<tasklet>
<chunk reader="itemReader" writer="itemWriter"
commit-interval="2" retry-limit="3">
<retryable-exception-classes>
<include class="org.springframework.dao.DeadlockLoserDataAccessException"/>
</retryable-exception-classes>
</chunk>
</tasklet>
</step>

A Etapa permite um limite para o número de vezes que um item individual pode ser repetido e uma lista de exceções que são "repetíveis". Mais detalhes sobre como novas tentativas podem ser encontrados em Capítulo 9, Repetir.


0 para resposta № 2

o trabalho em lote de primavera falha se alguma etapa falharexecução completa sem qualquer erro ou exceção. Se algum erro ou exceção ocorrer em qualquer etapa, a etapa será definida como falha e, com isso, o trabalho também será definido como trabalho com falha.

Primeiro de tudo, se você quiser reiniciar um trabalho vocêprecisa ter certeza de que o trabalho está definido como reinicializável. De outra forma você não pode executar o mesmo trabalho novamente. Mais do que um trabalho só pode ser reiniciado e apenas se tiver falhado no anterior tentativa. Uma vez terminado com sucesso, você não pode reiniciar um trabalho, mesmo que seja declarado como reinicializável, Sim, você pode, mas o parâmetro de trabalho deve ser diferente.

o atributo retry-limit define quantas vezes uma tarefa / etapa com falha de um trabalho com falha pode ser tentada novamente para iniciar

Para usar o limite de repetição, você também precisa definir em qual exceção ou erro ele deve tentar novamente