0


for循环中循环一次提交一次 insert update 关闭事务 spring springboot mybatis

省流:

在方法上直接加如下注解:

@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void t1(){
    //业务代码
}

正文:

在测试的时候,有时候会希望在for循环中,代码循环一次就提交一次事务。

方法一:

最简单的方式,就是关闭事务,不需要事务。添加注解如下:

@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void t1(){
    //业务代码
}

方法二:

如果说是真的在生产上有这样的需要,每循环一次就提交事务,那就需要手动控制事务了。

需要这几行代码:

            DefaultTransactionDefinition dt = new DefaultTransactionDefinition();
            dt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
            TransactionStatus status = platformTransactionManager.getTransaction(dt);
            platformTransactionManager.commit(status);

用法如下:

    @Autowired
    private PlatformTransactionManager platformTransactionManager;
    
    @Test
    public void t1(){
        for(int i=0; i<list.size(); i++){
            DefaultTransactionDefinition dt = new DefaultTransactionDefinition();
            dt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
            TransactionStatus status = platformTransactionManager.getTransaction(dt);
            mapper.select(o);
            mapper.insert(o);
            platformTransactionManager.commit(status);
        }
    }

具体解读请前往以下两篇文章:

Transactional的7种Propagation:

spring springboot mybatis 事务配置 Transactional的Propagation 开启事务 关闭事务_globalcoding的博客

开启和关闭事务时sqlsession创建机制,手动控制事务时sqlsession 创建机制:

spring springboot mybatis transaction 开启事务 关闭事务 不使用事务_globalcoding的博客

=====================分割线=========================

文章到此已经结束,以下是紫薯补丁

@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void t1(){
//业务代码
}

@Autowired
 private PlatformTransactionManager platformTransactionManager;
 
 @Test
 public void t1(){
     for(int i=0; i<list.size(); i++){
         DefaultTransactionDefinition dt = new DefaultTransactionDefinition();
         dt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
         TransactionStatus status = platformTransactionManager.getTransaction(dt);
         mapper.select(o);
         mapper.insert(o);
         platformTransactionManager.commit(status);
     }
 }

本文转载自: https://blog.csdn.net/u011149152/article/details/133883953
版权归原作者 globalcoding 所有, 如有侵权,请联系我们删除。

“for循环中循环一次提交一次 insert update 关闭事务 spring springboot mybatis”的评论:

还没有评论