Spring事务

本文介绍了如何在Spring框架中配置事务处理,包括开启事务管理、使用@Transactional注解标记事务接口,配置DataSourceTransactionManager,以及如何设置回滚规则和使用Propagation.REQUIRES_NEW来独立日志事务。

1.在springConfig里开启事务处理模式

@EnableTransactionManagement//开启spring事务管理模式

2.在需要被事务管理的接口或方法上添加注解

@Transactional //配置当前接口方法具有事务

3.配置事务管理器

​
    @Bean
    public DataSourceTransactionManager transactionManager(DataSource dataSource){
        //创建一个事务管理器对象
        DataSourceTransactionManager dataSourceTransactionManager = new         
        DataSourceTransactionManager();
        //注入数据源Bean
        dataSourceTransactionManager.setDataSource(dataSource);
        return dataSourceTransactionManager;
    }

​

4.设置需要回滚的异常类型(默认回滚的是1.运行时异常 2.ERROR)

@Transactional(rollbackFor = {Exception.class})

5.默认情况下,事务协调员会全部加入事务管理员的事务。

而有时需要设置事务协调员不加入事务管理员,例如:

     try{
            accountDao.outMoney(out,money);
            int i = 1/0;
            accountDao.inMoney(in,money);
        }finally {
            logService.log(out,in,money);
        }

在银行转账时,我们希望在数据库中留下转账记录,无论转账这个事务执行成功与否。

按照默认设置,outMoney,inMoney和log三个事务会加入管理员成为一个事务,因此它们同成功同失败,无法实现上述需求。因此需要设置日志记录这个事务与管理员独立。设置方法如下:

public interface LogService {
    //propagation设置事务属性:传播行为设置为当前操作需要新事务
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    void log(String out, String in, Double money);
}

在日志记录这个方法上添加注解propagation = Propagation.REQUIRES_NEW,表示无论是否存在默认事务(管理员),均为本事务新建一个事务。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值