事務(wù)的基本原理
Spring 事務(wù) 本質(zhì)上是對JDBC事務(wù)的封裝。
對于純JDBC操作數(shù)據(jù)庫,想要用到事務(wù),可以按照以下步驟進(jìn)行:
Connection con = DriverManager.getConnection() //1.獲取連接
try {
con.setAutoCommit(false); //2.開啟事務(wù)
//3. do your business
con.commit() //4.提交事務(wù)
} catch (Exception e){
con.rollback(); //5.回滾
}finally{
conn.close(); //6.關(guān)閉連接
}
這種方式的事務(wù)管理使事務(wù)范圍可以在代碼中很清晰地表達(dá)出來,但它有以下缺點(diǎn):
- 容易出現(xiàn)重復(fù)代碼和錯誤
- 任何錯誤可能產(chǎn)生較大的影響
- 錯誤難以調(diào)試和復(fù)現(xiàn)
- 降低了代碼庫的可讀性
使用Spring的事務(wù)管理功能后,我們可以不再寫步驟 2、4 和5的代碼,而是由Spirng 自動完成。
標(biāo)準(zhǔn)配置
要 開 啟 Spring 的 事 務(wù) 處 理 , 在 Spring 的 XML 配 置 文 件 中 簡 單 創(chuàng) 建 一 個 DataSourceTransactionManager 對象:
<!-- 配置事務(wù)管理器 -->
<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,還可以設(shè)置事務(wù)傳播、隔離級別、如何回滾等。