根據鏈接數理解spring事務

若是使用的不是同一個數據庫鏈接,事務根本就無從談起,驗證下service方法添加註解@Transactional後的鏈接數。數據庫

一次action請求動做能夠操做多個service服務類,一個service服務能夠訪問多個dao類進行數據庫操做,假設service中有dao1和dao2,在service方法中獲取鏈接進行驗證:spa

1、比較兩次從datasource獲取的Connection對象;對象

dao1.getDataSource().getConnection() != dao1.getDataSource().getConnection()事務

由於datasource的每次getConnection都是從鏈接池中獲取一個可用的數據庫鏈接,因此兩次調用確定不是同一個鏈接;get

2、比較兩次用DataSourceUtils從同一個dao的getDataSource獲取的Connection對象;io

DataSourceUtils.getConnection(dao1.getDataSource()) != DataSourceUtils.getConnection(dao1.getDataSource())service

仍是不相等,同一個dao取到不一樣鏈接,不一樣dao確定也是不一樣鏈接;請求

3、給service方法添加事務註解@Transactional;方法

DataSourceUtils.getConnection(dao1.getDataSource()) == DataSourceUtils.getConnection(dao2.getDataSource())數據

即便是在兩個不一樣的dao中使用的仍是同一個鏈接。

相關文章
相關標籤/搜索