Spring在一个事物中开启另一个事物并提交

//自己平时的一点笔记
在对数据库数据进行修改操作时,当代码中出现异常时,那么事物就会进行回滚操作,数据库内的数据将不会被修改;但总是会有一些需要就是即使代码中途报错了,也要将数据库中的数据进行修改,这时,就需要重新开启一个事物去提交;

  1. 方法一:运用注解 @Transactional(propagation = Propagation.REQUIRES_NEW)
//propagation = Propagation.REQUIRES_NEW 新开启了一个事物
@Transactional
   public void user(){
       this.insertUser(user);
       int aa = 10 / 0;//这里会报错
   }

   @Transactional(propagation = Propagation.REQUIRES_NEW)
   public void insertUser(User user){
       this.save(user);
   }
结果:可以新增数据到数据库
  1. 方法二:直接写代码提交
@Autowired
   private PlatformTransactionManager transactionManager;

@Transactional
   public void user(){
       this.insertUser(user);
       int aa = 10 / 0;//这里会报错
   }
   
   public void insertUser(User user){
       DefaultTransactionDefinition def = new DefaultTransactionDefinition();
       def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);//新发起一个事务
       TransactionStatus status = transactionManager.getTransaction(def);
       this.save(user);
       transactionManager.commit(status);
   }
   结果:数据也可以新增进数据库

版权声明:本文为weixin_45299175原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。