Transaction之坑:Spring中配置Transaction與不配置有何區別

首先

Spring中 Transaction管理 配置有兩種方式:sql

  • Annotation式:@Transactional
  • Xml式:<tx:method />

Note: 如下全部討論,都是用 @Transactional 方式來 開啓Transaction支持數據庫


問題

  1. 什麼樣的mehtod須要配置註解 @Transactional
  2. method 沒有配置註解 @Transactional, 難道 sql操做 就不會被 commit

解決

  1. 配置@Transactional的目的就是手動開啓事務,保證method中一系列sql操做包含在同一事務中,從保證數據的完整性(回滾或提交)與讀寫安全(隔離級別);安全

  2. DataSource缺省 配置: defaultAutoCommit=true;code

即: 若是method不配置 @Transactional ,則每執行一個 SQL操做,若是成功,默認開啓的事務就會 當即 向數據庫自動commit,而不能rollback事務

  1. 爲了維護 數據庫的完整性,保證成批的 SQL 語句要麼所有 commit,要麼所有 rollback。一般包含如下兩種方式:
    • BEGIN, ROLLBACK, COMMIT來實現,顯式地開啓並控制一個Transaction
    • 執行命令SET AUTOCOMMIT=0,用來 禁止 當前會話自動commit

method上配置註解@Transactional,就是使用第一種方式來實現Transaction管理 基於SpringAOP實現方法加強,這裏表現爲TransactionAspectSupportit

相關文章
相關標籤/搜索