2017-11-28 45 views
0

grailsトランザクションが終了した後、いくつかのタスクを実行する必要があります。私は休止状態のコミットを探していませんが、その代わりに、サービスのトランザクションが終了した後に呼び出すメソッドが必要です。トランザクション終了後にタスクを実行する - Grails

どうすればよいですか?私はドキュメントを読んだが、何も見つかりませんでした。それはafterUpdateやafterCommitのような通常のイベントです。

ありがとうございます!

答えて

-1

これは本当にあなたがやろうとしていることに依存します。おそらく、サービス上で@Transactionalメソッドを呼び出すことですが、それが返ってきたら、トランザクションの後に実行する必要があるコードを実行してください。

代わり、あなたはちょうどあなたが使用することができ、簡単な何かをするためにいくつかのタスクをスピンオフする場合:

new java.util.Timer().runAfter(1000) { //time in milliseconds 
    //code to run here 
} 

これは新しいスレッドをスピンオフするだけの近道であると(後に閉鎖体を実行します上記の例では)1秒間...クロージャはまだ注入されたgrailsオブジェクトにアクセスできますが、セッションにアクセスすることはできません。私はそれを再度確認したいと思います。私はいくつかの場所で、トランザクション内の処理が終了するまで待つ必要のある通知を送信するためにこれを使用しました。

0

あなたは現在のセッションに

sessionFactory.currentSession.addEventListener(...)

class MyListener extends BaseSessionEventListener { 
    @Override 
    void transactionCompletion(boolean successful) { 

    } 
} 

をイベントリスナーを追加することができますあなただけのトランザクションを確認する必要があるパラメータを経由して成功しました。また、1つのセッションに複数のトランザクションがある場合、リスナがそれぞれ1つ呼び出されることを理解してください。

関連する問題