JdbcTemplate支持设置事务的提交规则。事务提交指事务操作正常完成后,提交事务,使得数据库的改变持久化。
JdbcTemplate允许设置以下几种事务提交规则:
- commitOnSuccess:事务操作成功后自动提交(默认规则)
- commitOn(Exception.class):遇到指定异常提交
- commitWithoutSavePoint:不使用事务保存点
设置事务提交规则的步骤如下:
- 在 Spring 配置文件中进行事务管理器的配置:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
- 在JdbcTemplate中添加
@Transactional
注解,指定提交规则:
public class UserDaoImpl implements UserDao {
@Transactional(commitOn = {Exception.class})
public void saveUser(User user) throws Exception {
jdbcTemplate.update(SQL_INSERT, ...);
}
}
- 事务操作在遇到指定条件后会触发提交。
例如:
- commitOn设置为Exception.class,遇到Exception提交
- saveUser()方法正常结束后,事务自动提交,数据变更持久化。
这可以使事务操作结果更早的持久化,而不必等到方法结束。
所以,通过为JdbcTemplate的方法指定@Transactional注解,设置合理的提交规则,可以使事务处理更加灵活。如果需要在指定异常后提交,可以设置commitOn规则。
一个完整示例:
@Transactional(commitOn = {Exception.class})
public void saveUser() throws Exception {
jdbcTemplate.update(SQL_INSERT, ...);
}