在方法上直接加如下注解:
- @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
- 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 DefaultTransactionDefinition dt = new DefaultTransactionDefinition();
dt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status = platformTransactionManager.getTransaction(dt);
mapper.select(o);
mapper.insert(o);
platformTransactionManager.commit(status);
}
}