事务的超时回滚

简介: 事务的超时回滚

事务的超时回滚


什么是超时回滚


  1. 如果一个事务执行的时间超过某个时间限制,就让该事务回滚。
  2. 可以通过设置事务超时回顾来实现。


基本语法


@Transactional(timeout = 时间)


代码演示


@Transactional(
            propagation=propagation.REQUIRES_NEW,
            //设置事务传播属性
            isolation=Isolation.READ_COMMITTED,
            //设置隔离级别
            timeout=2
                              //设置事务超时时间


超时回滚-实例代码实现


修改GoodsService.java ,增加buyGoodsByTxTimeout()

测试事务的超时回滚(超时时间,我们设置为2 秒)

@Transactional(timeout = 2)
public void buyGoodsByTxTimeout(int user_id, int goods_id, int num) {
    //查询到商品价格
    Float goods_price = goodsDao.queryPriceById02(goods_id);
    //购买商品,减去余额
    goodsDao.updateBalance02(user_id, goods_price * num);
    System.out.println("====超时start====");
    try {
        Thread.sleep(4000);
        //休眠4秒
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    System.out.println("====超时end====");
    //更新库存
    goodsDao.updateAmount02(goods_id, num);
}


测试TxTest.java, 增加测试方法


//测试购买商品(使用了声明式事务, 测试事务超时回滚)
@Test
public void buyGoodsByTxTimeoutTest() {
    ApplicationContext ioc = new ClassPathXmlApplicationContext("tx_ioc.xml");
    GoodsService bean = ioc.getBean(GoodsService.class);
    bean.buyGoodsByTxTimeout(1, 1, 1);
    System.out.println("------ok--------");
}

抛出异常,事务进行回滚,原来的操作将会撤销

Transcation timed out : deadline was …

相关文章
|
5月前
|
SQL Oracle 关系型数据库
第7章 事务
第7章 事务
31 0
|
7月前
|
存储 Java 中间件
事务一致性测试
事务一致性测试
60 0
手动回滚、提交事务
手动回滚、提交事务
69 1
|
存储 Oracle 固态存储
深入理解事务
事务将应用程序的多个读、写操作捆绑在一起成为一个逻辑执行单元。即事务中的所有读写是一个执行的整体,整 个事务要么成功(提交)、要么失败(中止 或者 回滚)。如果失败,应用程序可以安全地重试。
16447 0
深入理解事务
|
人工智能 关系型数据库 MySQL
事务详解
事务是逻辑上的一组操作,要么都执行,要么都不执行。
80 0
|
SQL 存储 关系型数据库
|
SQL Java 大数据
事务详解(2)
你好看官,里面请!今天笔者讲的是事务。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
173 1
|
数据库
什么时候需要使用事务
什么时候需要使用事务
636 0
|
Oracle 安全 Java
事务详解(1)
你好看官,里面请!今天笔者讲的是事务。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
113 2
|
SQL XML Java
事务超时
本文概览:介绍了超时有关的概念:@Transaction的timeout、mybatis的timeout、mysql的innodb_lock_wait_timeout。
835 0
事务超时