Я реализую некоторую обработку повторных попыток в своих методах, используя Spring Retry.
У меня есть уровень доступа к данным (DAL) в моем приложении и уровень обслуживания в моем приложении.
Уровень «Мой сервис» вызывает DAL, чтобы установить удаленное соединение для получения информации. Если DAL терпит неудачу, он повторит попытку. Однако, если количество повторных попыток не удается, я хотел бы повторно создать исключение.
В моем текущем проекте я что-то очень похожее на это:
@Configuration
@EnableRetry
public class Application {
@Bean
public Service service() {
return new Service();
}
}
@Service
class Service {
@Autowired
DataAccessLayer dal;
public void doSomethingWithFoo() {
Foo foo = dal.getFoo()
// do something with Foo
}
}
@Service
class DataAccessLayer {
@Retryable(RemoteAccessException.class)
public Foo getFoo() {
// call remote HTTP service to get Foo
}
@Recover
public Foo recover(RemoteAccessException e) {
// log the error?
// how to rethrow such that DataAccessLayer.getFoo() shows it throws an exception as well?
}
}
В моем приложении есть служба, и эта служба вызывает DataAccessLayer getFoo. Если getFoo
терпит неудачу несколько раз, DAL будет обрабатывать повторные попытки. Если после этого ничего не получится, я бы хотел, чтобы мой сервисный уровень что-то с этим сделал. Однако я не знаю, как об этом сообщить. Я использую intelliJ, и когда я пытаюсь throw e;
в методе @Recover recover
, я не получаю никаких предупреждений о том, что DataAccessLayer.getFoo
выдает какие-либо исключения. Я не уверен, что так будет. Но я бы хотел, чтобы среда IDE предупредила меня, что, когда повторные попытки завершатся неудачно, будет выдано новое исключение, чтобы уровень службы знал, что его ожидает. В противном случае, если он вызывает dal.getFoo
, он не знает, как обрабатывать какие-либо ошибки. Как это обычно делается? Не следует ли мне использовать декларативный стиль АОП в пользу императивного?
org.springframework.remoting.RemoteAccessException
расширяетRuntimeException
? - person pirho   schedule 26.10.2020