spring中配置事物先:
<! -- 配置事物管理器 -- >
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" /> <! -- 加载数据源 -- >
</bean>
<! -- 配置事物模板,可以理解为对象 -- >
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager" /> <! -- 加载事物管理器 -- >
</bean>
注入事物模板对象:
/**
* 事务模版对象
*/
@Autowired
protected TransactionTemplate transactionTemplate;
使用实例:
this.getTransactionTemplate().execute(new TransactionCallback<Object>() { // 启动事物
@Override
public TradeOrderIssuedResponse doInTransaction(TransactionStatus status) { // 事物原子方法,此方法中的所有代码为一个事物,统一控制处理
// 事物回滚方法
status.setRollbackOnly();
}
});
基于注解的事物管理:
<!-- spring中开启注解事物管理的支持 声明式事务管理 配置事物的注解方式注入--> <tx:annotation-driven transaction-manager="transactionManager"/>
使用实例:
@Transactional(rollbackFor=Exception.class)
public void insert(String sql, boolean flag) throws Exception {
dao.insertSql(sql);
// 如果flag 为 true ,抛出异常
if (flag){
throw new Exception("has exception!!!");
}
}
注意:rollbackFor属性指定出现Exception异常的时候回滚,遇到检查性的异常需要回滚,默认情况下非检查性异常,包括error也会自动回滚。 异常被捕获不会回滚