java / expert
Snippet
Programmatische Transaktionssteuerung mit TransactionTemplate
Während @Transactional der Standard ist, bietet das TransactionTemplate eine feingranulare programmatische Steuerung innerhalb einer Methode. Dies ist unerlässlich, wenn Sie mehrere Operationen ausführen müssen, bei denen nur bestimmte Blöcke Atomarität erfordern oder wenn manuelle Rollbacks ohne das Werfen von Exceptions ausgelöst werden sollen.
snippet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Servicepublic class CriticalService {private final TransactionTemplate txTemplate;public void executeInSequence() {txTemplate.executeWithoutResult(status -> {repository.save(new Entity("A"));try {externalService.call();} catch (Exception e) {status.setRollbackOnly();}});}}
spring
Erklärung
1
txTemplate.executeWithoutResult(status -> { ... });
Führt den Callback-Code innerhalb eines verwalteten Transaktionskontexts aus.
2
status.setRollbackOnly();
Löst manuell einen Rollback aus, ohne eine RuntimeException werfen zu müssen.
3
private final TransactionTemplate txTemplate;
Ein thread-sicheres Template, das das programmatische Transaktionsmanagement vereinfacht.