I'm using Retryable and Recover annotation in spring, but the recover method is not triggered after all retry attempts
My code:
in the application class I added - @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 #####");
}
}
