事務的基本原理
Spring 事務 本質上是對JDBC事務的封裝。
對于純JDBC操作數據庫,想要用到事務,可以按照以下步驟進行:
Connection con = DriverManager.getConnection() //1.獲取連接
try {
con.setAutoCommit(false); //2.開啟事務
//3. do your business
con.commit() //4.提交事務
} catch (Exception e){
con.rollback(); //5.回滾
}finally{
conn.close(); //6.關閉連接
}
這種方式的事務管理使事務范圍可以在代碼中很清晰地表達出來,但它有以下缺點:
- 容易出現重復代碼和錯誤
- 任何錯誤可能產生較大的影響
- 錯誤難以調試和復現
- 降低了代碼庫的可讀性
使用Spring的事務管理功能后,我們可以不再寫步驟 2、4 和5的代碼,而是由Spirng 自動完成。
標準配置
要 開 啟 Spring 的 事 務 處 理 , 在 Spring 的 XML 配 置 文 件 中 簡 單 創 建 一 個 DataSourceTransactionManager 對象:
<!-- 配置事務管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="masterDataSource" />
</bean>
<!-- 啟用事物注解 -->
<tx:annotation-driven transaction-manager="transactionManager" />
然后,就可以在代碼中使用 @Transactional注解了,上面的代碼就簡化為:
@Transactional
public void businessLogic() {
//do your business
}
通過使用@Transactional,還可以設置事務傳播、隔離級別、如何回滾等。