【SSM-Spring】Spring事务传播行为

通过propagation 注解事务传播行为

@Transactional(propagation = Propagation.)

事务的传播行为

在这里插入图片描述
在这里插入图片描述

新建需求,同时买两本书

在这里插入图片描述
Cashier:

package SpringTemplate.SpringTX事务准备.事务传播行为;

import java.util.List;

public interface Cashier {
    public void checkout(String username, List<String> isbn);
}

CashierImpl:

import java.util.List;

@Service("cashier")
public class CashierImpl implements Cashier {

    @Autowired
    private BookShopService bookShopService;

    @Transactional
    @Override
    public void checkout(String username, List<String> isbns) {
        for(String isbn:isbns){
            bookShopService.purchase(username,isbn);
        }
    }
}

Test:

import java.util.Arrays;

public class Test {
    private ApplicationContext ac = null;
    private BookShopService bookShopService =null;
    private BookShopDao bookShopDao =null;
    private Cashier cashier = null;
    {
        ac =  new ClassPathXmlApplicationContext(
                "classpath:JDBCTEM/SpringTXcontext.xml"
        );
        bookShopDao = ac.getBean(BookShopDao.class);
        bookShopService = ac.getBean(BookShopService.class);
        cashier =ac.getBean(Cashier.class);
    }
    @org.junit.Test
    public void TwoTransactionalTest(){
        cashier.checkout("AA", Arrays.asList("1001","1002"));
    }
}

默认传播行为 REQUIRED,使用调用方法的事务

 @Transactional(propagation = Propagation.REQUIRED)

余额不足时,一本也没成功,因为使用的是同一个事务,两个行为必须都失败或者都成功
propagation
在这里插入图片描述
在这里插入图片描述

REQUIRES_NEW

在这里插入图片描述
Cashier 购买两本书的方法调用了 BookShopService中没次买一本的方法。默认他们是一个事务。但是 BookShopService要是有自己单独的事务方法_NEW
就可以一本能成功的时候就成功了。
BookService中的代码:

@Service("bookShopService")
public class BookShopServiceImpl implements BookShopService {

    @Autowired
    private BookShopDao bookShopDao;

    //2 添加事务注解
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    @Override
    public void purchase(String username, String isbn) {

        int price =  bookShopDao.findBookPriceByIsbn(isbn);

        bookShopDao.updateBookStock(isbn);

        bookShopDao.updateUserAccount(username,price);
    }
}

在这里插入图片描述
在这里插入图片描述
第一本购买成功,第二本的余额不足,事务失败。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值