理想情況下我們的業務元件事務全部通過spring宣告,但是一些特殊的業務方法(特別是涉及到外部系統介面呼叫的情形)我們往往需要編碼實現事務的提交與回滾,這時應該怎麼辦呢?假如我們編碼事務的**中還需要呼叫spring控制的業務元件方法(這些方法同時被正常的web請求使用),這時該怎麼辦呢?
首先回答第乙個問題.第一:我們可以將不需要宣告性事務的元件直接脫離spring容器,但問題是我們將同時失去依賴注入及攔截的特性.第二:還將元件部署於spring中,但是不要使用其事務proxy,直接在物件級別禁用事務**,或者只指定其中某些方法應用事務**.
我們再來看第二個問題.實質是同樣的業務方法即需要在容器事務中執行,又需要在編碼事務中執行,怎麼協調呢?那就是應用分身術~! 在容器中配置兩個元件例項,乙個應用事務proxy,乙個禁用;禁用的那個可以直接在編碼事務中執行.但是需要注意這時的元件將不是單例模式了~!
第二個問題的延伸討論:這種情況下往往需要在多個資料庫連線間同一事務,或者乙個是hibernate乙個是資料庫連線,這時如何提交事務回滾事務?怎麼辦?答案是。。。
...未完待續
spring 註解驅動 事務管理器
需要匯入的依賴 com.mchange c3p0 0.9.5.5 org.springframework spring aspects 5.2.5.release org.springframework spring jdbc 5.2.4.release 使用jdbctemplate 運算元據庫 u...
Spring與事務管理
整合事務管理 編碼方式管理事務 使用宣告式事務 以註解的方式描述事務 1 理解事務 事務的4個要素及其工作原理。acid 原子性 atomic 事務是由乙個或者多個活動組成的乙個工作單元。原子性確保事務中的所有操作全部發生 成功 或者全部不發生 回滾 一致性 consistent 一旦事務完成 不管...
Spring3 0配置多個事務管理器
由於現在大部分專案都有多個資料庫,如何實現多個資料庫的事物控制呢 下面為spring3.0配置多個事務管理器 即操作多個資料來源 的方法 public class transactionalservice transactional datasource2tx public void dosomet...