美文网首页Java架构技术栈
小短文 || springboot手动事务回滚

小短文 || springboot手动事务回滚

作者: 若丨寒 | 来源:发表于2020-07-24 14:35 被阅读0次
技术转载 || springboot手动事务回滚

亲测在使用@Transactional、@Transactional(rollbackFor = Exception.class)及catch异常之后 throw new RuntimeException();仍然不能解决线程中的事务回滚。下面使用线程锁机制,进行整体的事务提交及事务回滚,代码如下:

在springboot启动类上加  @EnableTransactionManagement  注解

线程类中添加以下代码

@Autowired    private PlatformTransactionManager platformTransactionManager;    @Autowired    private TransactionDefinition transactionDefinition;    private Lock lock = new ReentrantLock();    // todo 业务处理方法 数据存储异常 手动进行回滚    public void saveMsg(String message) throws Exception {        lock.lock();        TransactionStatus transaction = platformTransactionManager.getTransaction(transactionDefinition);        try {          //todo 具体业务,对数据库的操作 start           test1Service.save(test1);           test2Service.save(test2);           //end                       platformTransactionManager.commit(transaction);        } catch (Exception e) {            platformTransactionManager.rollback(transaction);            e.printStackTrace();        } finally {            lock.unlock();        }    }

注:如果无法用 @Autowired 程序启动进行对象创建,可以使用init静态注入,如果对象可以正常创建,下面代码可以忽略。

@Autowired    private static PlatformTransactionManager platformTransactionManager;    @Autowired    private static TransactionDefinition transactionDefinition;    @Autowired    public void init(PlatformTransactionManager platformTransactionManager,TransactionDefinition transactionDefinition    ) {        DriverAlfaServerHandler.platformTransactionManager = platformTransactionManager;        DriverAlfaServerHandler.transactionDefinition = transactionDefinition;    }

此回滚方法亲测有效。

来源:https://www.tuicool.com/articles/RZVfa2n
欢迎关注微信公众号【慕容千语】

相关文章

网友评论

    本文标题:小短文 || springboot手动事务回滚

    本文链接:https://www.haomeiwen.com/subject/oqbjlktx.html