Sto lavorando a un'app Java che utilizza le classi Spring IoC e JDBC Template. Ho una classe DAO che ha 4 metodi: m1() a m4(). m1 esegue più inserti e gli aggiornamenti sulla tabella t1, t2 m2 sul tavolo, m3 in t3, eccTransazioni facili con Spring JDBC?
I metodi DAO vengono utilizzati come segue:
while(true)
{
//process & generate data
dao.m1(data1);
dao.m2(data2);
dao.m3(data3);
dao.m4(data4);
//sleep
}
voglio le operazioni db sotto il 4 metodo consecutivo chiama per essere atomico, o tutte e 4 le tabelle sono state aggiornate con successo o nessuna lo sono. Pertanto, se si verifica un errore durante l'esecuzione delle operazioni in m3(), si desidera ripristinare tutte le modifiche (aggiornamenti & inserti) eseguite in m2 & m1.
Così molla ti consente di farlo nel modo seguente?
while (true)
{
//process & generate data
transaction = TransactionManager.createNewTransaction();
transaction.start()
try
{
dao.m1(data1);
dao.m2(data2);
dao.m3(data3);
dao.m4(data4);
}
catch(DbUpdateException e)
{
transaction.rollBack();
}
transaction.end();
// sleep
}
o ci sono modi migliori per farlo?
Non credo è necessario annotare il m1, m2, ecc come @Transactional. Se qualcuno lancia un'eccezione, verrà eseguito il rollback di tutto ciò che è già stato completato da doWork. – Chadwick
Non è necessario in questo contesto, no. Ma se stanno facendo degli aggiornamenti, dovresti annotarli come richiedono le transazioni, altrimenti potresti trovarti ad eseguire aggiornamenti non transazionali se li chiami al di fuori del contesto doWork(). – cletus
L'annotazione @Transactional fa qualcosa quando viene applicata a un metodo privato? –