У меня есть обновление таблицы, которое вызывает взаимоблокировку, и я пытаюсь заставить Spring Retry повторить попытку, когда метод получает какое-то исключение блокировки. Я пытался удалить maxAttempts, значение и отсрочку, но, похоже, он никогда не ловил никаких исключений. Я что-то упускаю? Нужно ли объявлять bean-компонент в файле приложения? Любая помощь приветствуется!
Приложение.Java
@SpringBootApplication
@EnableRetry
public class Application extends SpringBootServletInitializer {
ДетальСервис
@Service
public class DetailService {
@Retryable(maxAttempts = 5, value = { LockAcquisitionException.class, ConcurrencyFailureException.class }, backoff = @Backoff(delay = 500, multiplier = 2) )
public void delete(final String detailCode) {
try {
this.delete(this.dao.findByDetailCode(detailCode));
} catch (LockAcquisitionException | ConcurrencyFailureException e) {
LOG.warn("Locking error! Going to retry", e.getMessage());
throw e;
}
}
public void delete(Details detail) {
this.dao.delete(detail);
}
@Retryable(maxAttempts = 5, value = { LockAcquisitionException.class, ConcurrencyFailureException.class }, backoff = @Backoff(delay = 500, multiplier = 2) )
public void delete(final Integer id) {
if (id != null) {
try {
this.delete(this.dao.findOne(id));
} catch (LockAcquisitionException | ConcurrencyFailureException e) {
LOG.warn("Locking error! Going to retry", e.getMessage());
throw e;
}
}
}
РЕДАКТИРОВАТЬ
Переписал мой DetailService выше, чтобы дать больше деталей и добавить отсутствующие методы.