私のSpringアプリケーションでは、サービス層のメソッドが としてマークされて@Transactional(propagation=Propagation.REQUIRED)
おり、使用して<tx:annotation-driven />
います。通常、メソッドの完了時にトランザクションを自動的にコミットするというデフォルトの動作は魅力的です。しかし、特定のケースでは、メソッドの終了直前にコミットする必要があります。その時点の後に来る部分が例外をスローしたとしても、そうです。
そのようなメソッド内で現在のトランザクションにアクセスする方法はありますか? 私はこれを試しました:
TransactionDefinition td = new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_MANDATORY); // make sure we're talking about the same transaction already provided by the annotation
TransactionStatus status = transactionManager.getTransaction(td);
// perform various JDBC operations
transactionManager.commit(status);
methodThatNeedsToBeCalledAfterCommit();
しかし、ログを見ると、「AbstractPlatformTransactionManager.processCommit(752) | Initiating transaction commit」が 1 回しか発生していないことがわかります。タイムスタンプから、これはメソッドの通常の動作であるafter のように見えます。methodThatNeedsToBeCalledAfterCommit()
@Transactional
そのようなメソッド内で実際にコミットを強制する方法はありますか?