事务的基本原理
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,还可以设置事务传播、隔离级别、如何回滚等。