当前位置: 首页 > 知识库问答 >
问题:

如何在包含3个dao方法调用的服务方法中创建spring事务

酆浩邈
2023-03-14

我有一个database.xml来定义spring事务,比如

<aop:config proxy-target-class="true">
        <aop:advisor advice-ref="txAdvice"
            pointcut="execution(* com.compass.utils..*.*(..))" />
</aop:config>

和我的dao,服务都在utils包或子包中,比如:

com.compass.utils.db.dao
com.compass.utils.service
    public class AlarmService {
         @autowired
         private AlarmDao alarmDao;
         @autowired
         private PositionDao positionDao;
         @autowired
         private AccountDao accountDao;
      public void testService(){
          alarmDao.save(a);
          positionDao.save(b);
          accountDao.save(c);
     }
   }

提前感谢您的帮助和建议!

共有1个答案

汪德明
2023-03-14

调用TestService中创建了多少事务?4笔交易?3笔交易

将只创建一个TX,如果其中一个save方法发生异常,该TX将回滚。

如果我更改了AlarmService包路径,使其脱离com.compass.utils,就像com.compass.service一样,关于我的问题的事务会有什么影响?

附言。您可以使用不同的传播级别更改所有这些。这些都是基于默认行为的。

 类似资料:
  • 我正在尝试创建一个事务方法,该方法调用其他几个事务方法以保存一些相互依赖的db实体。如果任何调用失败,我希望事务完全回滚。但是,这不是观察到的行为。这是我的代码: 也有and,但是当事务在第二次调用时失败时,第一个被提交。

  • 有可能将两个DAO组合成一个服务方法吗? 我想创建一个泛型方法,它将根据输入参数选择正确的DAO。现在我想出的是从服务对象外部接受Dao的方法。但这需要在控制器中初始化适当的Dao,这有点难看...

  • 我有两项服务。一个从数据库加载数据,修改它们并调用另一个服务来保留修改后的数据: 使用这样的代码,每次调用CalledService.persistData时都会创建一个新的事务。然而,如果我删除了标有“##”的行,那么整个流程只创建了一个事务,允许在发生任何异常时回滚。 这是预期的Spring行为吗? 有没有办法保持被叫服务事务性,并避免在从调用方服务转到被叫服务时创建新事务? 请注意,我确实尝

  • 编辑:实际上,上面的日志是在被调用的方法中创建的,这是由JPA存储库引起的,而不是在它之前。所以看起来似乎根本没有处理@Transactional注释。 反射是否导致spring错过@Transactional注释?我需要被调用的方法使用它自己的事务,以便在从调用返回之前提交它。

  • 我正在处理一些遗留代码,其中所有Spring DAO都用@Transactional注释注释。现在我有一个业务需求,我需要在我的服务层中调用两个不同的DAO,如果事务在任何时候失败,就回滚它。 如何在Spring5中实现这一点,而不从DAO中删除@Transactional注释,并且仍然从服务层使用它们。我认为下面的代码不起作用,因为每个DAO中的事务彼此独立。 非常感谢提前。