Spring 4.x、Hibernate 5.x、Spring-Data 1.11を使用しています。現在、SQLインターセプタはorg.hiberate.EmptyInterceptor
まで拡張されています。 HibernateInterceptor.setInterceptor
を使用してウェブリクエストの開始。 Springタスクスケジューラを介してバックグラウンドで実行されるジョブもあります。これらは独自のトランザクションを開始しますが、明らかにそれらに接続されたインターセプタを取得しません。この時点で私がしようとしているのは、すべての場合においてSpringの@Transactionalをインターセプトする方法を見つけることです。常にSpring 4.xトランザクションをインターセプトする方法
私はTransactionInterceptor
と@TransactionalEventListener
を調べましたが、今のところ動作していないため、現在Springでベストプラクティスと考えられているものを見つけるのは難しいです。
したがって、私たちが解決しようとしている問題は、トランザクションが失敗したかどうかを知る必要があることです。
Springでは、いつでもプレ/ポストコミットイベントを取得するための現行のベストプラクティスは何ですか?必要に応じて対応することができますか?
編集@TransactionalEventListener
が、それはそれが本当に何をしたかの私の部分にちょうど誤解だったので、私たちは春のイベントを使用していないと動作しないことに気づきました。 @TransactionalEventListener
を使用することです
@Aspect
@Component
public class AfterTransactionalAspect {
@After("@annotation(Transactional)")
public void cleanupAfterTransaction(JoinPoint joinPoint) throws Throwable {
// ... Do cleanup work here
}
(あなたは春宛てのイベントを使用している場合)行くにはもう一つの良い方法:あなたがそれを行うことができ
https://spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2#transaction-bound-events –