Предотвращение сохранения данных при повторном вызове ошибки - Spring Retry - PullRequest
1 голос
/ 04 августа 2020

Я использую @Retry в методе, который также помечен @Scheduled, и пытаюсь подключиться к другой службе с помощью RestTemplate.

@Scheduled
@Retry
public void method(){
//Generate excel by getting data from DB
//Saving the document in DB
//Calling another service using rest template by passing document id
}

Приведенный выше код работает нормально, но в случае сбоя другой службы или любое исключение, этот полный метод выполняется, и повторная попытка пытается вызвать его снова, поэтому в Db вставляется еще один документ.

Итак, вопрос в том, могу ли я запускать Retry только для вызова службы RestTemplate, а не для создания документа снова?

1 Ответ

1 голос
/ 04 августа 2020

Я прочитал какую-то статью, в которой упоминалось, что мы должны попытаться сделать нашу повторную попытку c идемпотент.

Итак, теперь проверяя, существует ли уже документ с таким именем, я не сохраняю документ, а получаю из базы данных.

Таким образом я решил свою проблему.

@Scheduled
@Retry
public void method(){
//Generate excel by getting data from Db
//Checking document's availability in db
if(exists){
// Fetching from Db
}else{
//Saving the document in DB
}
//Calling another service using rest template by passing document id
}
...