/ / Limite di ripetizione batch molla - molla, batch di primavera

Limite di ripetizione del lotto di molla: molla, batch di primavera

Quando si definisce un lavoro batch in primavera e l'utilizzoparametro retry-limit nella descrizione xml è il numero totale di esecuzioni o il numero di tentativi? vale a dire quando retry-limit = 1, il mio lavoro verrà eseguito una o due volte (in caso di errore nella prima esecuzione)?

Sembra una domanda sciocca, ma non ho trovato una risposta chiara in nessuna documentazione che ho visto ...

risposte:

2 per risposta № 1

Il retry-limit l'attributo è veramente "basato sull'elemento" e non"Job-based". Con "item-based" intendo che per ogni oggetto (record / riga) che viene letto / elaborato / scritto, se quell'elemento fallisce, verrà ritentato il limite di tentativi. Se si raggiunge questo limite, il passo avrà esito negativo.

Per esempio

<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>

Nella precedente configurazione di base, quando a SomeException viene lanciato da uno qualsiasi dei componenti nel passo (itemReader, itemWriter, o itemProcessor), l'elemento viene ritentato fino a tre volte prima che il passaggio non riesca.


Ecco la spiegazione del dottor Spring

Nella maggior parte dei casi, si desidera che un'eccezione causi un salto o un errore di passaggio. Tuttavia, non tutte le eccezioni sono deterministiche. Se una FlatFileParseException si incontra mentre legge, sarà sempre gettato per quella registrazione; resettare il ItemReader non aiuterà Tuttavia, per altre eccezioni, come a DeadlockLoserDataAccessException, che indica che il processo attuale haha tentato di aggiornare un record sul fatto che un altro processo trattiene un blocco, in attesa e riprovando potrebbe risultare nel successo. In questo caso, è necessario configurare nuovamente:

<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>

Il passaggio consente un limite per il numero di volte in cui un singolo elemento può essere ritentato e un elenco di eccezioni che sono "riprovabili". Maggiori dettagli su come possono essere trovati i tentativi Capitolo 9, Riprova.


0 per risposta № 2

il processo batch in batch fallisce in caso di mancata esecuzione di un passocompleta esecuzione senza errori o eccezioni. Se si verifica un errore o un'eccezione in qualsiasi passaggio, il passaggio è definito come non riuscito, con questo il lavoro viene definito anche come lavoro non riuscito.

Prima di tutto, se vuoi ricominciare un lavoro tuè necessario assicurarsi che il lavoro sia definito come riavviabile. Altrimenti non puoi eseguire di nuovo lo stesso lavoro. Più di un lavoro può essere riavviato solo e solo se è fallito nel precedente tentativo. Una volta terminato correttamente, non è possibile riavviare un lavoro anche se è dichiarato riavviabile, Sì, ma è possibile che il parametro del processo sia diverso.

l'attributo retry-limit definisce quante volte un'operazione / un task non riuscito di un lavoro fallito può essere riprovato per l'avvio

Per usare retry-limit devi anche definire su quale eccezione o errore dovrebbe riprovare