spring手动开启事务,手动提交事务,手动回滚事务

1.未加事务注解(或者事务配置), 所以需要手动开启事务和手动提交事务和手动回滚事务

@Autowired
  private PlatformTransactionManager txManager;

  @Autowired
  private ShopGroupBuyDao shopGroupBuyDao;

  @GetMapping(value = "/transactionDemo")
  public void ceshi() {

    // 手动开启事务  start
    DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
    TransactionStatus status = txManager.getTransaction(def);
    // 手动开启事务  end

    try {

      ShopGroupBuy shopGroupBuy = shopGroupBuyDao.selectOne(new LambdaQueryWrapper()
                                                                .eq(ShopGroupBuy::getGroupBuyId, 505));

      shopGroupBuy.setGroupBuyTheme("wulin11");

      int i = shopGroupBuyDao.updateById(shopGroupBuy);

      int a = 1 / 0;

      // 手动提交事务  start
      txManager.commit(status);
      // 手动提交事务  end

      if (i > 0) {
        System.out.println("更新成功");
      } else {
        System.out.println("更新失败");
      }

    } catch(Exception e) {

      e.printStackTrace();

      // 手动回滚事务  start
      txManager.rollback(status);
      // 手动回滚事务  end
      
    }
  }

 

 

 

 

2.加事务注解

这里演示加了事务注解(@Transactional(rollback=Exception.class)), 且在代码中也加了try catch相当于没有加事务注解, 所以事务不起作用, 此时就需要在catch里面手动添加事务的回滚,即这样:也可以参考博客:https://blog.csdn.net/qq_26106607/article/details/83827630

  @Autowired
  private ShopGroupBuyDao shopGroupBuyDao;

  @GetMapping(value = "/transactionDemo")
  @Transactional(rollbackFor = Exception.class)
  public void ceshi() {

    try {

      ShopGroupBuy shopGroupBuy = shopGroupBuyDao.selectOne(new LambdaQueryWrapper()
                                                                .eq(ShopGroupBuy::getGroupBuyId, 505));

      shopGroupBuy.setGroupBuyTheme("wulin11");

      int i = shopGroupBuyDao.updateById(shopGroupBuy);

      int a = 1 / 0;

      if (i > 0) {
        System.out.println("更新成功");
      } else {
        System.out.println("更新失败");
      }

    } catch(Exception e) {

      e.printStackTrace();

      // 手动回滚事务  start
      TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
      // 手动回滚事务  end

    }
  }

 

 

 

 

你可能感兴趣的:(spring,事务,手动事务,回滚事务)