Все еще пытаюсь повторить попытку вручную, может также попробовать Spring Retry (1)

Spring Boot Java Spring
Все еще пытаюсь повторить попытку вручную, может также попробовать Spring Retry (1)

🤞 Персональная домашняя страница:@青城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метод.

a77e9e674a3fb25288b99a45a377d43.png


Мальчик, ты не можешь видеть достаточно? нажмите на каменьПодробное описание, Просто нажмите и посмотрите, может быть, будут сюрпризы? Добро пожаловать в поддержкуНравится/Подписывайтесь/Комментируйте, ваша поддержка — моя самая большая мотивация для Gengwen, спасибо!