@Transactional 方法可以在不挂起的情况下调用另一个@Transactional 方法吗?

Can @Transactional method call another @Transactional method without suspending?

我有不同的方法 A 和方法 B 类。两者都带有@Transactional 注释。方法A正在调用B。是否有任何解决方案可以在不同的事务中调用B而不暂停A事务? Propagation.REQUIRES_NEW B 提供了在调用时始终创建新事务但暂停调用者事务的可能性

据我所知,您不能使用注释 REQUIRED_NEW。

但是spring也支持使用 TransactionTemplate、TransactionDefinition 手动进行交易。

我们可以只用一个 PlatformTransactionManager 使用多个定义。

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/support/TransactionTemplate.html

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/TransactionDefinition.html

https://www.baeldung.com/spring-programmatic-transaction-management#4-custom-transaction-configurations

事务传播行为Propagation.NESTED 支持要求。

请通读 Spring 官方文档:Understanding PROPAGATION_NESTED

PROPAGATION_NESTED uses a single physical transaction with multiple savepoints that it can roll back to. Such partial rollbacks let an inner transaction scope trigger a rollback for its scope, with the outer transaction being able to continue the physical transaction despite some operations having been rolled back.

有关 Spring 事务中嵌套传播的其他详细信息也可以在此 answer 中阅读。