JAVA学习之spring事物控制

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也会自动回滚。 异常被捕获不会回滚