Nella sua accezione più ampia, una "transazione" è un gruppo di azioni che dovrebbero essere eseguite come se fossero un'unica azione "di massa". Il termine è più spesso usato nel contesto dei database, ma può essere applicato a molti tipi di programmi (in particolare quelli che implementano un modello di comando). Quando parliamo di database, e spesso anche se non lo siamo, vogliamo che le transazioni abbiano le cosiddette proprietà ACID :
-
Atomicità - La transazione è una singola unità indistruttibile. Non può essere parzialmente applicato o parzialmente annullato. È completamente fatto o non fatto affatto.
-
Coerenza - L'applicazione / database / qualsiasi cosa deve essere in uno stato valido sia prima che dopo la transazione. Se il tentativo di eseguire una transazione produce uno stato non valido, allora dobbiamo "rollback" all'ultimo stato valido.
-
Isolamento - Ogni transazione è separata da ogni altra transazione. Nessuna transazione può mai "intercalare". Vengono sempre eseguiti uno alla volta (o in modo indistinguibile da "uno alla volta").
-
Durata: una volta che la transazione è stata eseguita, rimane eseguita per sempre. Questo è per lo più rilevante per i database, dove significa che il cambiamento dei dati è stato effettivamente commesso sul disco, in modo che i nuovi dati non possano essere persi anche se la macchina si riavvia improvvisamente.
Non tutti i tipi di transazioni devono avere tutte e quattro le proprietà, ma di solito quando la parola "transazione" viene utilizzata in un contesto di programmazione, che implica un sistema che impone almeno alcune se non tutte. Credo che Spring si riferisca alle transazioni di database e pretenda di far rispettare tutte queste proprietà.