Как использовать джоб в условии метода?

Рейтинг: -1Ответов: 1Опубликовано: 10.02.2023

Всем привет! Прошу подсказать, есть следующий метод:

@Override
public Integer getStatusMission(Dto dto, Entity entity) {

    String action = "ACTION=ENTITY_GO";
    val payload = action + dto.getId() + dto.getStartDate();

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.TEXT_PLAIN);

    HttpEntity<String> request = new HttpEntity<>(payload,headers);
    ResponseWrapper response = restTemplate.postForObject(Url, request, ResponseWrapper.class);

    if (response.getPayload().getStatus() != 0) {
        val save = updDet(dto.getPhone(), dto.getId(), dto.getMissionId());

        PushSmsSubType type = PushSmsSubType.IS_DONE;
        String text = "Открыта награда";

        pushService.pushMessage(entity, entity.getPhone(), text, type,true);
    }

    return response.getPayload().getStatus();
}

Нужно в условии прописать доп условие, что необходимо запустить метод снова с этими же входными данными через 5 минут, т.е:

if (response.getPayload().getStatus() != 0) {
    val save = updDet(dto.getPhone(), dto.getId(), dto.getMissionId());

    //Здесь нужно объявить, что если (getPayload().getStatus() != 0) то, запусти метод снова через 5 минут

    PushSmsSubType type = PushSmsSubType.IS_DONE;
    String text = "Открыта награда";

    pushService.pushMessage(entity, entity.getPhone(), text, type,true);
}

Пытался через создание джоба и @Schedulled, но не совсем понял как объявить его в методе

Ответы

▲ 0

Вам нужен TaskScheduler:


@Autowired
private TaskScheduler taskScheduler;

@Override
public Integer getStatusMission(Dto dto, Entity entity) {

    ...
    ResponseWrapper response = restTemplate.postForObject(Url, request, ResponseWrapper.class);

    if (response.getPayload().getStatus() != 0) {
        taskScheduler.schedule(
           () -> {getStatusMission(dto, entity);},
           Instant.now().plusSeconds(TimeUnit.MINUTES.toSeconds(5))
        );
        ...
    }

    return response.getPayload().getStatus();
}