Код: Выделить всё
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