Capisco cosa è una transazione in un'applicazione web, dove ci sono alcuni gruppi di interazioni di database che devono fallire o avere successo insieme, quindi il database è sempre in uno stato coerente.
Ma perché un framework come Spring Batch è costruito attorno alle transazioni? Il mio gruppo di record impegnati non è un gruppo logico (la dimensione di questo gruppo è impostata usando la proprietà commit-interval): non è un problema se uno fallisce e gli altri hanno successo. E, al contrario, se il mio intervallo di commit è 100, qual è lo scopo di ripristinare 100 operazioni indipendenti quando si fallisce?
Se la mia domanda non è abbastanza chiara, facciamo un esempio: ho un lavoro con pochi passaggi, e ogni passaggio principale riguarda l'analisi di alcuni file xml e l'inserimento di frammenti in DB. Cosa succederà se tutti questi passaggi non vengono eseguiti in nessuna transazione e qualsiasi lettura / elaborazione / scrittura non riuscita genera un'eccezione rilevata e produce solo alcuni registri? Cosa sto perdendo facendo così?
La migliore risposta che ho trovato fino ad ora è: le transazioni batch non sono transazioni logiche, riguardano le prestazioni, non è possibile elaborare l'articolo in blocchi senza transazioni, è vero?
Capisco come impostare le transazioni e ho già scritto alcuni lavori, la mia domanda non riguarda "come" ma "perché".