Действие через час от указанного времениJAVA

Программисты JAVA общаются здесь
Anonymous
Действие через час от указанного времени

Сообщение Anonymous »

У меня есть сервис, который записывает в базу данных пользователей моего Telegram-бота. А мне нужно реализовать механизм, с помощью которого если пользователь не ответил в течение часа, он записывается в базу данных. У пользователя есть поле со временем последней активности.

Код: Выделить всё

public class DataBaseListener {
private final UserStateManager userStateManager;
private final QuestionService questionService;
private final UserStateService userStateService;

/**
* 
С определенной в application.properties задержкой запускает запись всех пользователей, не допрошедших опрос, в базу данных
*/
@Scheduled(fixedRateString = "${scheduler.save-inactive-person.interval}", initialDelayString = "${scheduler.delay-before-first-call.interval}")
private void pullUsersToDB(){
userStateService.saveUsers(usersNeededWriteToDb());
}

/**
* 
Возвращает лист всех юзеров, которые полностью прошли опрос либо не отвечали больше часа
*/
private List usersNeededWriteToDb(){
if (userStateManager.getUserStates().isEmpty()){
log.info("Список пользователей пуст! Нечего проверять и записывать в бд");
return new ArrayList();
}

return userStateManager.getUserStates()
.values()
.stream()
.filter(x-> x.getLastActivityTime().isBefore(LocalDateTime.now().minusHours(1)))
.toList();

}
}

`
Я пытался использовать планировщик, но мне удалось добиться проверки только каждый час для каждого пользователя. Возникает проблема, что пользователь может быть неактивен более часа, и я не знаю, как это решить. Мне посоветовали использовать SchedulerService, но я не разобрался, как его использовать для достижения цели.

Подробнее здесь: https://stackoverflow.com/questions/789 ... ified-time

Вернуться в «JAVA»