我在spring中使用Retryable和Recover注释,但是在所有重试尝试之后不会触发恢复方法
我的代码:
在应用程序类中,我添加了- @EnableRetry(proxyTargetClass=true)
@Slf4j
@Component
public class OpenAuditMessageReceiver implements MessageListener {
@Autowired
private MessageReceiver messageReceiver;
@SneakyThrows
@Override
@Retryable(value = {SQLException.class} , maxAttempts = 2, backoff = @Backoff(delay = 2000))
public void onMessage(Message message, byte[] pattern) {
try {
log.info("OpenAuditMessageReceiver got {}", new String(message.getBody()));
OpenAuditDTO openAuditDTO = messageReceiver.getObjectMapper().readValue(message.toString(), OpenAuditDTO.class);
log.debug("Consumed - {}", openAuditDTO);
messageReceiver.getAuditEntityRepository().insert(openAuditDTO);
log.info("Successfully saved Audit Information");
} catch (Exception e){
log.error("Error occurred while handling {}", message, e);
if(e instanceof SQLException){
throw e;
}
}
}
@Recover
public void recover(SQLException e, Message message, byte[] pattern){
log.info("##### handle Recovery Mechanism #####");
}
}发布于 2022-09-13 13:04:28
@SneakyThrows会导致异常被包装在UndeclaredThrowableException中。所以我们找不到匹配的@Recover方法。

https://stackoverflow.com/questions/73700157
复制相似问题