在Spring中结合@Transactional和@Retryable方法 - 如何不回滚事务

时间:2017-11-14 08:17:26

标签: java spring jpa transactions

我们正在将Spring Integration用于我们的行动链。 我们想为一个流使用一个事务(所有bean应该使用相同的事务)。这就是我们为允许使用现有交易的交易使用“REQUIRED”标志的原因。 但在某些bean中我们想要使用可重试的功能。因此,如果方法中发生某些异常,我们要等待一点,然后再尝试执行逻辑。据我所知,Spring将真正使用初始事务,但它被标记为仅回滚。然后流中的其他bean成功执行其逻辑。

@Transactional
@Retryable(
        maxAttempts = 10,
        backoff = @Backoff(delay = 3000),
        value = PessimisticLockException.class
)
public String someMethod(String someData) {

问题是,最后,我可以在日志中看到异常

Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly

那么是否可以强制Spring不将事务标记为仅回滚?或者我们可能误解了一些东西。

0 个答案:

没有答案