程序员社区

【Spring学习及总结23】事务属性(timeout,noRollbackFor,rollbackFor,timeout)

文章目录

          • timeout:超时,事务超出指定执行时长后自动终止并回滚
          • readOnly =false:默认为false
          • noRollbackFor--class[ ]:让原来回滚的异常不回滚
          • rollbackFor:让原来不回滚的异常回滚

isolation:事务的隔离级别

propagation :事务的传播行为

noRollbackFor—class[ ]:哪些异常事务可以不回滚

noRollbackForClassName–String[ ]

timeout:超时,事务超出指定执行时长后自动终止并回滚

readOnly : 设置事务未只读事务

rollbackFor—class[ ]:哪些异常事务需要回滚

rollbackForClassName—String[ ]

timeout:超时,事务超出指定执行时长后自动终止并回滚
@Service
public class BookService {
    @Autowired
    BookDao bookDao;
   
    @Transactional(timeout = 3)
    public void checkout(String username,String isbn){
        //减库存
        bookDao.updateStock(isbn);
        
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        //获取价格
        int price = bookDao.getPrice(isbn);
        //减价格
        bookDao.updateBalance(username,price);
    }
}
readOnly =false:默认为false
@Service
public class BookService {

    @Autowired
    BookDao bookDao;
    
    @Transactional(readOnly =false)
    public void checkout(String username,String isbn){
        //减库存
        bookDao.updateStock(isbn);
        //获取价格
        int price = bookDao.getPrice(isbn);
        //减价格
        bookDao.updateBalance(username,price);
    }
}
noRollbackFor–class[ ]:让原来回滚的异常不回滚

异常分类:
运行时异常:可以不处理,默认都回滚
编译器异常:必须处理,默认不回滚

@Service
public class BookService {

    @Autowired
    BookDao bookDao;

    @Transactional(noRollbackFor = {ArithmeticException.class})
    public void checkout(String username,String isbn){
        //减库存
        bookDao.updateStock(isbn);
        //获取价格
        int price = bookDao.getPrice(isbn);
        //减价格
        bookDao.updateBalance(username,price);

        //运行时异常,默认回滚
        int i=10/0;
    }
}

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

rollbackFor:让原来不回滚的异常回滚
@Service
public class BookService {

    @Autowired
    BookDao bookDao;

    @Transactional()
    public void checkout(String username,String isbn) throws FileNotFoundException {
        //减库存
        bookDao.updateStock(isbn);
        //获取价格
        int price = bookDao.getPrice(isbn);
        //减价格
        bookDao.updateBalance(username,price);
        //编译时异常,默认不回滚
        new FileInputStream("D://hdafkajd");
    }
}

在这里插入图片描述
设置rollbackFor属性,让原来不回滚的事务回滚。

@Service
public class BookService {

    @Autowired
    BookDao bookDao;

    @Transactional(rollbackFor = {FileNotFoundException.class})
    public void checkout(String username,String isbn) throws FileNotFoundException {
        //减库存
        bookDao.updateStock(isbn);
        //获取价格
        int price = bookDao.getPrice(isbn);
        //减价格
        bookDao.updateBalance(username,price);
        //编译时异常,默认不回滚
        new FileInputStream("D://hdafkajd");
    }
}

在这里插入图片描述

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 【Spring学习及总结23】事务属性(timeout,noRollbackFor,rollbackFor,timeout)

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区