Spring事务

等一下,我们进行事务的提交等操作,一般不就是用在业务层(service层)。

假如我们一个转账操作,(封装成一个方法),设计一个账户的增加,一个账户的减少。

当我们执行一个操作出现 异常,但是上个增加语句已经执行了因此,但是一下语句因为报错没执行,就出现偏差了。

无非这不是就是,当我们trt检测出现异常时进行事务roollback,成功时提交。

SpringConfig.java

//开启注解式事务驱动
@EnableTransactionManagement 

JdbcConfig.java

//配置事务管理器,mybatis使用的是jdbc事务
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        DataSourceTransactionManager manager = new DataSourceTransactionManager();
        manager.setDataSource(dataSource);
        return manager;
    }

Service.Java 

   //配置当前接口方法具有事务,
    // 就是这整个方法就算一个事务,只要他不出错,就能自动提交事务。里面语句正常执行。
    @Transactional
    public void transfer(String out,String in ,Double money) ;

事务角色

事务管理员:我的一个方法包含多个事务语句,如增删,因为增和删分别本身是各自一条是语句。

那我们这个方法就是事务管理员。

事务协调员:上面的增删语句个是事务协调员。

当我们,为业务层的某个接口方法 + @@Transactional时,这个方法就属于一个事务了。

@Transactional(rollbackFor = {IOException.class})

 看的出设置....异常,几乎都是一样的,就是值的个是不同,另外插一句,我们Spring事务,并不是对任何异常都进行回滚,如IOEXcetion异常他就不回滚,那么我们就要添加到里面。

 事务传播行为

 因为日志方法这是事务,在加减事务中就相当于事务协调员。

假如说: 当我们,上述转账操作,新加一个logService操作,当我们转账操作出现异常时,他肯定会不报错,转账不成功,但是我们的转账日志也记录不了,那么我们也想在转账出错时,让日志也记录,那么应该怎么做。

 @Transactional(propagation = Propagation.REQUIRES_NEW)
    // 开启一个新事务,他不作为事务协调员加入事务管理员中。
    public void transfer(String out, String in, Double money);

 假如@Transactional上层方法也有@Transactional,那么就是相当一个事务管理员和事务协调员。

 看的出这个是相对的,新建 就是相当于把方法开启事务,加入就是作为一个事务协调员加入事务管理员,等一下,这个是相对的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

本郡主是喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值