我需要在標記爲@Transactional的類的方法中手動維護事務。如果我現在嘗試這樣做,就會拋出一個異常(很可能是因爲事務被提交了兩次,一次由我提交,兩次由包裝代理提交)。我需要做什麼。是否有可能將整個@Transactional類的一個方法標記爲非事務性
如果這是不可能的,那麼是否有辦法在事務成功提交時(數據庫中的數據和所有內容)得到通知,以便我調用另一個依賴於相同數據庫的應用程序?
我需要在標記爲@Transactional的類的方法中手動維護事務。如果我現在嘗試這樣做,就會拋出一個異常(很可能是因爲事務被提交了兩次,一次由我提交,兩次由包裝代理提交)。我需要做什麼。是否有可能將整個@Transactional類的一個方法標記爲非事務性
如果這是不可能的,那麼是否有辦法在事務成功提交時(數據庫中的數據和所有內容)得到通知,以便我調用另一個依賴於相同數據庫的應用程序?
不,我不相信這是可能的。我相信如果你創建另一個線程並執行代碼,它將會在事務之外。要小心,因爲當你創建額外的線程並自己管理它時,它可能會變得很冒險。
我希望你使用spring。如果是,那麼你可以。
從API here中讀取此代碼塊。在部分 10.5.6使用@Transactional
@Transactional(readOnly = true)
public class DefaultFooService implements FooService {
public Foo getFoo(String fooName) {
// do something
}
// these settings have precedence for this method
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void updateFoo(Foo foo) {
// do something
}
}
在標有傳播= Propagation.REQUIRES_NEW的方法中,我是允許開始/手動提交交易?我試過了,但我仍然得到相同的異常 – user802232
不要添加任何代碼來開始,提交或回滾你的自我,春天會爲你做。在上例中,在最後一行提交的updateFoo()方法開始時將開始一個新事務。如果在交易之間有任何問題將被回滾。 – ManuPK