我有一个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);
}
}
提前感谢您的帮助和建议!
在调用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中的事务彼此独立。 非常感谢提前。