LU10c - Transaktionen
Bei Fehler innerhalb von gesammelten Änderungen macht es in der Regel Sinn die bereits gemachten Änderungen wieder rückgängig zu machen. Dies geschieht bei SQL mittels Transactions.
BEGIN TRANSACTION; UPDATE Persons SET Balance = Balance - 100 WHERE PersonId = 'A'; UPDATE Persons SET Balance = Balance + 100 WHERE PersonId = 'B'; COMMIT;
Bei COMMIT; werden die gemachten Änderungen tatsächlich auf die Datenbank geschrieben, bei ROLLBACK; werden die Änderungen zurückgesetzt.
Bei SpringBoot gibt es dazu die Annotation org.springframework.transaction.annotation.Transactional. Hat eine Methode diese Annotation und es passiert eine java.lang.RuntimeException während der Ausführung, wird automatisch ein Rollback aller SQL-Statements seit Beginn der Methode gemacht.
Logging
Achten Sie bei Ihrem Logging darauf, dass die Logeinträge auch im Fall eines Rollbacks Sinn ergeben.
for (AccountUpdate update : accounts) { ... log.debug("Prepared account update: number={} project={}", accountNumber, projectName); } log.info("All accounts updates processed successfully for project {}", projectName);