2022-01-07 springboot手动提交事务

88 阅读1分钟

有时候在代码编写过程中,会有一些特殊情况,不能等事务自动提交,而是需要手动将事务提交,那么在spring中如何手动开启一个新事务,并提交呢?

@Autowired
private PlatformTransactionManager transactionManager;// 引入 (平台)事务管理器,Spring 事务策略的核心。
public void test() {
    DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);//新发起一个事务
    TransactionStatus status = transactionManager.getTransaction(def);// 获得事务状态
    try {
        // 业务代码
        transactionManager.commit(status);// 手动提交事务
    }catch (Exception e){
        // 异常的时候回滚
        transactionManager.rollback(status);
    }
}

已经验证可用
还在test补充项目中 可以搜索

public void testshiwu

推荐TransactionTemplate

示例代码如下:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
class WordApplicationTests1 {


    @Autowired
    private PlatformTransactionManager transactionManager;

    @Autowired
    private TransactionTemplate transactionTemplate;

    @Test
    void contextLoads() {

        TransactionStatus transaction = transactionManager.getTransaction(new DefaultTransactionDefinition());
        try {
            // 业务代码
            transactionManager.commit(transaction);
        } catch (TransactionException e) {
            transactionManager.rollback(transaction);
            throw new RuntimeException(e);
        }

        transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus status) {

                try {
                    // 业务代码
                } catch (Exception e) {
                    status.setRollbackOnly();
                    throw new RuntimeException(e);
                }
            }
        });

    }
}

本文转自 jimolvxing.blog.csdn.net/article/det…,如有侵权,请联系删除。