Spring Batch: saltare durante la voce di scrittura

Primavera documentazione (Pg. 46, Sezione: 5.1.7) dice:

Per impostazione predefinita, indipendentemente dal riprova o ignora, eventuali eccezioni generate dal ItemWriter causerà la transazione controllata dalla Fase di rollback. Se salta è configurato come descritto in precedenza, le eccezioni generate dal ItemReader non rollback.

Mio commettere l’intervallo è impostato a 10. Quindi la mia comprensione del paragrafo di cui sopra è, se il loro è un errore di lettura 7 record di blocco di 10, l’elemento verrà saltata e la corretta 9 registrazioni vengono inviate in avanti di itemReader.

Tuttavia, se il 7 record è verificato un errore durante la scrittura – nessuno dei 10 record sarà scritto e un rollback accadrà.

Tuttavia, quando ho compreso l’errore gettato nel mio skipPolicy, itemWriter È iscritto il restante 9 record nel database di saltare il errored. Questo è in contraddizione con quanto sopra detto.

Che si può, si prega di spiegare il concetto di “saltare durante la voce di scrittura”.

Inoltre, anche se l’unico errore è generato ricevo il seguente:

SkipCount come -1 due volte, quindi come 0 una volta, e di nuovo -1 una volta nella mia shouldSkip(Oggetto, Throwable) metodo. — Non ricevo questo comportamento.

Anche rollback conteggio 2 — che cosa significa ? perché è 2 ?


@michael Sarebbe possibile per voi per spiegare il comportamento utilizzando alcune scenario!!

come “sto leggendo il 20 record da un file e la scrittura di un database dopo alcuni trattamenti. Ho un salto insieme di politiche per qualche eccezione. che cosa accadrà se l’eccezione si verifica durante la lettura, di processo, di scrivere-come le parti saranno impegnati, come predefinito di tentativi di opere, come la conta sarà aggiornato, etc. ecc….”

Sarà davvero un grande aiuto per me, come io sono ancora confuso con il comportamento..

questo è un sacco di chiedere, vi propongo di creare un progetto semplice e test da soli

OriginaleL’autore Nik | 2011-07-18

2 Replies
  1. 8

    Dal caso d’uso descrizione mi pare, che si mescolano concetti diversi.

    Descrivere un saltare scenario ma sembrano aspettare saltare dovrebbe funzionare come un nessun rollback scenario.

    dalla primavera documentazione del lotto

    saltare:

    errori durante l’elaborazione non deve tradursi in Fase di fallimento,
    ma deve essere ignorata invece

    vs nessun rollback:

    Se salta è configurato come descritto in precedenza, le eccezioni generate dal
    ItemReader non rollback.

    con parole mie saltare significa:

    Se il passaggio si verifica un errore durante la lettura/processo/scrittura, il blocco corrente sarà rollbacked e ogni elemento del blocco è di lettura/elaborati scritti e/o individualmente, senza il cattivo elemento. Fondamentalmente Primavera Lotto ricade commit-aliquota 1 per il brutto pezzo e va specificato commit-tasso dopo il brutto pezzo.

    Anche rollback conteggio 2 — che cosa significa ? perché è 2 ?

    da B. 5. BATCH_STEP_EXECUTION

    ROLLBACK_COUNT: Il numero di rollback durante l’esecuzione. Nota
    che questo numero include ogni volta rollback si verifica,
    inclusi i rollback per tentativi e quelli nel saltare la procedura di recupero.

    (sottolineare la mia)

    Inoltre, anche se l’unico errore è generato ricevo il seguente:

    SkipCount come -1 due volte, quindi come 0 una volta, e di nuovo -1 una volta nella mia
    shouldSkip(Oggetto, Throwable) metodo. — Non ricevo questo
    il comportamento.

    ho provato un semplice skip lavoro con entrambi configurazione stili skip-politica e saltare limite ignorabili-eccezione, entrambi hanno lavorato in modo identico in relazione al rollback e saltare conta

    (metadati del passaggio d’accordo, ma shouldSkip(…) sembra essere chiamato molto di più rispetto al previsto)

    OriginaleL’autore Michael Pralow

  2. 0

    Vorrei esporvi un problema che hai citato:

    SkipCount come -1 due volte, quindi come 0 una volta, e di nuovo -1 una volta nella mia shouldSkip(Oggetto, Throwable) metodo. — Non ricevo questo comportamento.

    Non so per quale firma del shouldSkip() metodo ti riferisci, ma a mio SkipPolicy interfaccia c’è un solo metodo con la seguente firma:

    boolean shouldSkip(Throwable t, int skipCount) throws SkipLimitExceededException;
    

    Il metodo deve decidere se il Exception e dato il skipCount dovrebbero essere ignorati o non.

    Purtroppo i programmatori di Spring Batch uso improprio di questo metodo alla prova, se un’eccezione è ignorabile, in generale, a prescindere dal numero di ignorare. Ecco perché ci sono diverse chiamate al metodo con il skipCount set di parametri per -1.

    Per questo motivo, non meraviglia il comportamento che hai visto.

    OriginaleL’autore Peter Wippermann

Lascia un commento