JdbcTemplate支持设置事务的回滚规则。事务回滚指在事务操作出现异常时,撤销事务中已执行的修改,还原到事务开始前的状态。
JdbcTemplate允许设置以下几种事务回滚规则:
- rollbackOnRuntimeException:遇到RuntimeException回滚(默认规则)
- rollbackOnCheckedException:遇到CheckedException回滚
- rollbackOn(Exception.class):遇到指定异常回滚
- noRollbackFor(Exception.class):遇到指定异常不回滚
设置事务回滚规则的步骤如下:
- 在 Spring 配置文件中进行事务管理器的配置:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
- 在JdbcTemplate中添加
@Transactional
注解,指定回滚规则:
public class UserDaoImpl implements UserDao {
@Transactional(rollbackFor = {Exception.class})
public void saveUser(User user) throws Exception {
jdbcTemplate.update(SQL_INSERT, ...);
throw new Exception(); // 抛出异常
}
}
- 事务操作在遇到指定异常后会触发回滚。
例如:
- rollbackFor设置为Exception.class,遇到任意Exception回滚
- saveUser()方法中抛出Exception
- 事务会回滚,保存的数据会被撤销
这可以使事务操作更加稳定,出现异常时不至于污染数据库数据。
所以,通过为JdbcTemplate的方法指定@Transactional注解,设置合理的回滚规则,可以使事务处理更加健壮。如果业务复杂,需要针对不同异常设置不同的回滚规则。
一个完整示例:
@Transactional(rollbackFor = {Exception.class})
public void saveUser() throws Exception {
jdbcTemplate.update(SQL_INSERT, ...);
throw new Exception();
}