我們大家都知道,需要控制事務時,需要在服務層使用
@transactional(rollbackfor = exception.class)
來控制事務,保證方法內的的多個 dao操作同時成功或失敗
今天就遇到了問題, 方法內的資料庫操作未受到事務控制, debug時,方法沒走完資料就落庫了, 這顯然是不對的
問題原因是:
我在service層 直接呼叫本service類的重寫的方法, 沒有通過注入的方式呼叫 所以事務沒有生效,
修改方案,
1.通過注入自己service 後 通過示例呼叫(不建議)
2.新增service類 再注入此類後呼叫此方法
最後來一句
**結構應該是 controller ->biz(處理邏輯,準備資料,呼叫service) ->service(提供服務,可加事務)->dao(運算元據庫,盡量單方法單sql)
上述問題因沒有 biz層 邏輯都寫在了 service,
Transactional 失效問題
transactional配置起來是簡單方便,但是坑也相當多,下面就記錄下這些坑。1 service類標籤新增在了介面上,查閱資料說介面的方法上可以加也不建議這樣用,但實際中這麼出現事務失效。2 transactional 註解只能應用到 public 可見度的方法上。3 預設情況下,spring會...
Transactional事物失效解決
這麼乙個類 public class foopublic void baz 可能會有不少人會跟我一樣,覺得上面這種方式呼叫 baz 方法時,bar 上的 transactional註解還是會起作用的,即bar 在被呼叫時,將會開啟事務。但是,當實際操作之後,你會發現,這樣並不會開啟新的事務?為什麼呢...
Transactional的失效場景
transactional我們在日常開發中經常用到,可能會經常遇到 transactional失效的情況。下面將從what where when三個方面講解 transactional。事務 transaction 是指我們做的一系列完整的事情,在事務中,任何一步出現了問題,這件事情就未算完成。這裡...