我在第一次嘗試Spring,但遇到了@Transactional的問題。我的應用程序的某些部分需要在方法中記錄異常,而不是將它們冒泡到main()
。但問題在於,如果發生異常,那些標有@Transactional的方法將不會回滾。有沒有更簡單的方法來結合@Transactional和日誌記錄?
總之,這不會」工作
@Transactional
public void doStuff() {
try {
//Do something that might cause an Exception
} catch (Exception e) {
log.error("Exception when trying to do stuff", e);
}
}
因爲從我的理解交易將永遠不會被如果出現異常回滾。
唯一的解決辦法我能想出:
public void doStuff() {
try {
doStuff0();
} catch (Exception e) {
log.error("Error encountered while attempting to join servers", e);
}
}
@Transactional
protected void doStuff0() {
//Do something that might cause an Exception
}
這是醜陋的,雖然,使用我不喜歡的圖案,並且在這個例子中幾乎兩倍的代碼。
是否有另外一種方法記錄異常並回滾事務?
順便說一句,您的解決方案不適用於JDK代理。 – Affe