1. 程式人生 > 程式設計 >Transaction之坑:Spring中配置Transaction與不配置有何區別

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

首先

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

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

Note: 以下所有討論,都是用 @Transactional 方式來 開啟Transaction支援


問題

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

解決

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

  2. DataSource預設 配置: defaultAutoCommit=true;

即: 如果method不配置 @Transactional ,則每執行一個 SQL操作,如果成功,預設開啟的事務就會 立即 向資料庫自動commit,而不能rollback

  1. 為了維護 資料庫的完整性,保證成批的 SQL 語句要麼全部 commit,要麼全部 rollback。通常包含以下兩種方式:
    • BEGIN,ROLLBACK,COMMIT來實現,顯式地開啟並控制一個Transaction
    • 執行命令SET AUTOCOMMIT=0,用來 禁止 當前會話自動commit

method

上配置註解@Transactional,就是使用第一種方式來實現Transaction管理 基於SpringAOP實現方法增強,這裡表現為TransactionAspectSupport