实现Runnable接口重写run方法下的事务回滚

废话不多说,一看就懂

@Transactional 经过测试没有生效,不管是通过手动设置回滚远点还是回滚都未生效,鄙人才疏学浅,目前还没想明白,可能是bean的调用不衬景或者spring的上下文没正常加载。

使用了TransactionTemplate 就正常使用,接下来贴上网上找的示例代码(我都能看懂,我相信你也能)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;

public class YourRunnable implements Runnable {

    @Resource
    private PlatformTransactionManager transactionManager;

    @Override
    public void run() {
        TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
        
        transactionTemplate.execute(new TransactionCallback<Void>() {
            @Override
            public Void doInTransaction(TransactionStatus status) {
                try {
                    // 你的业务逻辑
                    yourBusinessLogic();
                } catch (Exception e) {
                    status.setRollbackOnly(); // 标记事务回滚
                    // 处理异常(例如日志)
                }
                return null;
            }
        });
    }

    private void yourBusinessLogic() {
        // 业务逻辑实现
    }
}

TransactionTemplate

TransactionTemplate 是 Spring 提供的一个类,用于简化事务管理。它封装了事务的创建、提交和回滚的逻辑,使得开发者能够更方便地处理事务。主要特点包括:

编程式事务控制:允许在代码中灵活地控制事务,而不依赖于注解。
简化代码:通过 TransactionCallback 接口来定义事务内的业务逻辑,避免了重复的事务管理代码。
异常处理:提供了事务回滚机制,能够在业务逻辑抛出异常时自动标记事务为回滚状态。
PlatformTransactionManager
PlatformTransactionManager 是 Spring 的核心接口,负责管理事务的生命周期。主要功能包括:

事务创建:负责创建新的事务。
事务提交:在业务逻辑成功执行后,提交事务以保存变更。
事务回滚:在出现异常时回滚事务,以确保数据一致性。
支持多种事务管理:可以与不同的数据源(如 JDBC、JPA、Hibernate 等)结合使用,提供一致的事务管理接口。
总结
使用场景:
TransactionTemplate 更适合在需要细粒度控制事务的场合。
PlatformTransactionManager 是底层接口,通常由 Spring 提供的实现(如 DataSourceTransactionManager)来具体管理事务。
通过这两者结合,可以在 Spring 中灵活而高效地管理数据库事务。

在多线程环境中使用 TransactionTemplate 和 PlatformTransactionManager 可以实现事务管理,但要注意以下几点:

线程隔离:每个线程需要独立的事务管理,确保事务的状态不会相互干扰。

使用 TransactionTemplate:在每个线程中实例化 TransactionTemplate,并使用它来管理各自的事务。

异常处理:确保在业务逻辑中妥善处理异常,以便在需要时标记事务回滚。

资源管理:避免多个线程对同一资源的并发访问引发冲突。
至此结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值