当前位置: 代码网 > it编程>编程语言>Java > SpringBoot中手动开启事务的实现方法

SpringBoot中手动开启事务的实现方法

2025年11月24日 Java 我要评论
在spring boot中,虽然大多数情况下推荐使用@transactional注解来管理事务,但有时需要更灵活地手动控制事务。这可以通过transactiontemplate或platformtra

在spring boot中,虽然大多数情况下推荐使用@transactional注解来管理事务,但有时需要更灵活地手动控制事务。这可以通过transactiontemplate或platformtransactionmanager来实现

一、使用 transactiontemplate

transactiontemplate是spring提供的一个模板类,用于简化事务管理。

1、配置 transactiontemplate

(首先,确保你的项目已经配置了数据源和事务管理器(spring boot通常会自动配置这些))。

import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.transaction.platformtransactionmanager;
import org.springframework.transaction.support.transactiontemplate;
@configuration
public class transactionconfig {
    @bean
    public transactiontemplate transactiontemplate(platformtransactionmanager transactionmanager) {
        return new transactiontemplate(transactionmanager);
    }
}

2、使用 transactiontemplate

在需要手动管理事务的服务类中注入并使用transactiontemplate:

import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;
import org.springframework.transaction.support.transactioncallbackwithoutresult;
import org.springframework.transaction.support.transactiontemplate;
@service
public class myservice {
    @autowired
    private transactiontemplate transactiontemplate;
    public void savedata() {
        transactiontemplate.execute(new transactioncallbackwithoutresult() {
            @override
            protected void dointransactionwithoutresult(org.springframework.transaction.transactionstatus status) {
                try {
                    // 伪代码
                    // myrepository.save(new myentity("data 1"));
                    // myrepository.save(new myentity("data 2"));
                    // simulate an exception to trigger a rollback
                    if (true) {
                        throw new runtimeexception("simulated exception");
                    }
                    // myrepository.save(new myentity("data 3"));
                } catch (runtimeexception e) {
                    // rollback transaction if exception occurs
                    status.setrollbackonly();
                    throw e;
                }
            }
        });
    }
}

二、使用 platformtransactionmanager 直接管理事务

platformtransactionmanager接口提供了更细粒度的事务控制,适用于需要复杂事务管理的场景。

1、注入 platformtransactionmanager

在需要手动管理事务的服务类中注入platformtransactionmanager:

import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;
import org.springframework.transaction.platformtransactionmanager;
import org.springframework.transaction.transactiondefinition;
import org.springframework.transaction.transactionstatus;
import org.springframework.transaction.support.defaulttransactiondefinition;
@service
public class myservice {
    @autowired
    private platformtransactionmanager transactionmanager;
    public void performtransactionaloperation() {
        defaulttransactiondefinition def = new defaulttransactiondefinition();
        def.setname("mytransaction");
        def.setpropagationbehavior(transactiondefinition.propagation_required);
        transactionstatus status = transactionmanager.gettransaction(def);
        try {
            // perform database operations here
            // myrepository.save(new myentity("data 1"));
            // myrepository.save(new myentity("data 2"));
            // simulate an exception to trigger a rollback
            if (true) {
                throw new runtimeexception("simulated exception");
            }
            // myrepository.save(new myentity("data 3"));
            // commit transaction
            transactionmanager.commit(status);
        } catch (runtimeexception e) {
            transactionmanager.rollback(status);
            throw e;
        }
    }
}

到此这篇关于springboot中手动开启事务的实现方法的文章就介绍到这了,更多相关springboot手动开启事务内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com