为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Boot 中的同步事务

Spring Boot 中的同步事务

冉冉说 2021-11-11 18:11:27
在 Springboot 中,我调用它的每个服务都会打开一个事务,当服务返回时它会关闭该连接,但在我的情况下,我需要创建一个将同步运行的方法(此方法仅在非同步方法中运行),他需要OPEN 和 CLOSE 事务独立于是否打开一个事务,并且该方法中的每个 SQL 操作仅在该方法引发错误时才会回滚。如果调用它的方法抛出错误,他将不会回滚同步方法所做的任何事情。所以我尝试使用这个示例:@Servicepublic class MyService {    @Autowired    private MyRepository myRepository;    public void methodNotSyncronized(String arg1, String arg2){        logger.debug("init method no syncronied");        MyObjct myObj = myRepository.findOne(1);        methodSyncronized(arg2);        myRepository.save(myObj);   //If I got some error here everything that methodSyncronized did should remaining        logger.debug("finish method no syncronied");    }    @Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRES_NEW)    private synchronized  String methodSyncronized(String arg){        logger.debug("init method  syncronied");        //Here I will insert or delete something        }}但是当我调试这段代码时,我得到了:o.h.e.t.internal.TransactionImpl         : begin                       myService         : init method no syncronied                       myService         : init method  syncronied                       myService         : finish method no syncronied                     o.h.e.t.internal.TransactionImpl         : committing我怎样才能解决这个问题另一件事,即使我只对休眠打印的数字求和,我调用的每项服务也是如此:o.h.e.t.internal.TransactionImpl         : begin                       o.h.e.t.internal.TransactionImpl         : committing即使我把 @Transactional(readOnly=true)放在方法中
查看完整描述

1 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

它不起作用,因为Spring @Transaction method call by the method within the same class, does not work:这是 Spring AOP(动态对象和 cglib)的限制。



查看完整回答
反对 回复 2021-11-11
  • 1 回答
  • 0 关注
  • 259 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信