🤞 Персональная домашняя страница:@青城Sequencer Stone
🤞 Преимущества вентилятора:Добавить фан-базуОтвечайте на вопросы один на один, получайте бесплатные богатые шаблоны резюме, улучшайте учебные материалы и т. д. и станьте королем новой эры!
Для многих предприятий, чтобы сделать обработку более надежной и с меньшей вероятностью сбоя, иногда помогает автоматически повторять неудачные операции, используя этот механизм, это может сделать наши операции успешными при последующих попытках. В этой статье мы узнаем, как использовать функциональность Spring Retry в приложении Spring.
1. Конфигурация проекта
Чтобы включить поддержку Spring Retry, сначалаpom.xml
Добавьте в файл следующие зависимости
<properties>
<version.spring.retry>1.3.1</version.spring.retry>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>${version.spring.retry}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
</dependencies>
Здесь мы используем последние артефакты в центральном репозитории maven.1.3.1
. Помимо собственных зависимостей, обычное использованиеSpring Retry
также необходимо зависеть отAOP
. заSpring Boot
проект, вpom.xml
добавлено вSpring-Boot-starter-aop starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2. Включить поддержку Spring Retry
Чтобы включить функциональность Spring Retry, вам нужно добавить в класс конфигурации@EnableRetry
Примечания.
@SpringBootApplication
@EnableRetry
public class Launcher {
public static void main(String[] args) {
SpringApplication.run(Launcher.class, args);
}
}
Существует два распространенных способа использования функции повторной попытки, в том числе@Retryable
аннотацию к методу иRetryTemplate
После настройки политики выполните ее вручную.
Три, форма аннотации @Retryable
3.1 @Retryable
Метод аннотации используется в методе, который включает функцию повтора.@Retryable
Примечания.
Мы предоставляем интерфейс, предоставляем метод, который необходимо повторить, и аннотируем этот метод.
public interface RetryService {
/**
* 指定异常CustomRetryException重试,重试最大次数为4(默认是3),重试补偿机制间隔200毫秒
* 还可以配置exclude,指定异常不充实,默认为空
* @return result
* @throws CustomRetryException 指定异常
*/
@Retryable(value = {CustomRetryException.class},maxAttempts = 4,backoff = @Backoff(200))
String retry() throws CustomRetryException;
}
Содержимое назначения параметра аннотации объясняется в аннотации метода.
-
valueАтрибут сообщает Spring повторить попытку, когда метод находится в
CustomRetryException
Инициирует повторную попытку при возникновении исключения. - maxAttemptsУстанавливает максимальное количество повторных попыток, по умолчанию 3, если не указано иное.
- backoffУказывает время задержки для следующей повторной попытки, значение по умолчанию — 1 секунда.
CustomRetryException
Исключение является пользовательским исключением, код выглядит следующим образом
public class CustomRetryException extends Exception{
public CustomRetryException(String error){
super(error);
}
}
3.2 @Recover
будучи@Retryable
Используется для определения отдельного метода восстановления в случае сбоя аннотированного метода из-за указанного исключения.@Recover
Примечания.
@Service
@Slf4j
public class RetryServiceImpl implements RetryService {
private static int count = 1;
@Override
public String retry() throws CustomRetryException {
log.info("retry{},throw CustomRetryException in method retry",count);
count ++;
throw new CustomRetryException("throw custom exception");
}
@Recover
public String recover(Throwable throwable) {
log.info("Default Retry service test");
return "Error Class :: " + throwable.getClass().getName();
}
}
3.3 Тестирование
пройти черезJunit
Делайте модульные тесты.
@Test
void retry() {
try {
final String message = retryService.retry();
log.info("message = "+message);
} catch (CustomRetryException e) {
log.error("Error while executing test {}",e.getMessage());
}
}
Результаты вывода теста следующие, как и ожидалось, выполнено четыре разаretry
метод, введите после последнего выполненияrecover
метод.
Мальчик, ты не можешь видеть достаточно? нажмите на каменьПодробное описание, Просто нажмите и посмотрите, может быть, будут сюрпризы? Добро пожаловать в поддержкуНравится/Подписывайтесь/Комментируйте, ваша поддержка — моя самая большая мотивация для Gengwen, спасибо!