我們有一個基於Spring的應用程序,帶有@Transactional註解的服務層。我們需要之前和之後,原因如下一些事務方法有代碼的運行:在@Transactional方法之前和之後執行代碼
- 我們需要同步訪問基於密鑰的方法。該線程需要在事務開始之前阻塞。
- 如果事務成功,我們需要在隊列上發佈消息。
的選項似乎是:
- 創建類似的方法,可以在同步塊運行@Transactional方法和檢查返回然後發佈消息的服務類(需要由於AOP代理問題導致的單獨課程)。服務呼叫服務,不好,感覺像一個解決辦法。
- 編寫一個方面來環繞可以執行同步和消息發佈的@Transactional AOP。可能會工作,但寧願避免AOP。
- 將事務下移到域圖層。由於領域方法在不同的工作流程中被重複使用的方式,因此當前的實現不太可取或可能甚至是可行的。
- 在服務方法中手工編寫交易並廢止@Transactional。
我想這是一個相當普遍的要求。可能我錯過了一個選項5,這是顯而易見的選項!
同意這一點,我不明白爲什麼人們會想在這種情況下避免AOP。這是最乾淨的方法。 –
這是要走的路,畢竟@Transactional也使用AOP。所以連接另一個方面將是最好和最簡單的事情。 –
絕對使用AOP。正如@Sean指出的那樣,您已經在使用@Transactional來使用Spring AOP,並且Spring特別支持[定位註釋的切入點表達式](http://static.springsource.org/spring/docs/3.1.x/spring-framework -reference/html/aop.html#aop-pointcuts-designators),所以你可以告訴它在沒有額外工作的情況下每個@Transactional方法運行。 –