Spring jdbc事务管理之编程式事务

程序式事务:通过代码手动提交回滚事务的 事务控制方法

Spring JDBC之编程式事务的使用流程:
注意:编程式事务对Spring掌握的程度要求比较高,容易产生人为错误,优点是直接放在代码里,便于阅读
一、在配置文件中新增bean事务管理器,其中属性值为dataSource,引用JDBC数据源
<!--事务管理器-->
<bean id="transationManage" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
添加数据源事务管理器
private DataSourceTransactionManager transactionManager;
在要使用事务的类里包含私有属性DataSourceTransactionManager,并设置get和set方法然后进行IoC注入
在要使用事务的类的方法里开始如下流程:
首先实例化事务默认配置:
// 定义了事务默认的标准配置
TransactionDefinition transactionDefinition = new DefaultTransactionDefinition();
通过transactionManager.getTransaction(definition)获取事务状态:
// 开始一个事务,返回事务状态,事务状态说明当前事务的执行阶段
TransactionStatus status = transactionManager.getTransaction(transactionDefinition);
然后就是事务的正常提交与回滚
try {
Employee employee = new Employee();
for (int i = 1; i <= 10; i++) {
if (i == 3) {
throw new RuntimeException("意料之外的错误");
}
employee.setEname("employee" + i);
employee.setSalary(4000);
employee.setHiredate("2021-02-15");
employee.setDname("市场部");
employee.setEno(1000 + i);
employeeDao.insert(employee);
}
// 执行成功,提交事务
transactionManager.commit(status);
} catch (RuntimeException e) {
// 执行失败,进行回滚
transactionManager.rollback(status);
e.printStackTrace();
/*throw e; // 异常交由调用方处理*/
}
- getTransaction():返回一个已经激活的事务或创建一个新的事务(根据给定的TransactionDefinition类型参数定义的事务属性),返回的是TransactionStatus对象代表了当前事务的状态,其中该方法抛出TransactionException(未检查异常)表示事务由于某种原因失败。
- commit():用于提交TransactionStatus参数代表的事务,具体语义请参考Spring Javadoc;
- rollback():用于回滚TransactionStatus参数代表的事务,具体语义请参考Spring Javadoc。
https://github.com/MingCaiXiong/spring-learn/commit/ddca9c255b9ab41bc23af3ba41ecba377582e784