Как получить объект текущего сеанса (HttpSession) в методе @Scheduled в Spring 4.0.2?

Я использую Spring 4.0.2 для своего веб-приложения. Мое веб-приложение посвящено обработке файлов. Есть несколько статуй о файлах, таких как "В процессе", "В ожидании", "Завершено". Один пользователь может заполнить несколько файлов, но только по одному за раз. Таким образом, только один файл должен находиться в процессе выполнения для одного пользователя. Теперь я хочу через каждые 15 минут проверять, произошло ли какое-либо событие с конкретным файлом или нет. Если событие не произошло, я хочу изменить статус файла с "В процессе" на "В ожидании". Так что я попытался написать Планировщик весной, как указано ниже.

@Scheduler(fixedDelay = 15*60*1000)
public void checkFrequently()
{
   // here I am doing some operation to check for any event occurred in last 15 min or not.
   // here, I need HttpSession for two purposes. 
   // 1. to get current logged in user
   // 2. to get current file for current user
}

Есть ли возможность получить сессию в этом методе? Если это невозможно, каковы альтернативы?

1 ответ

Это невозможно. Планировщик запускается при запуске приложения, когда сеанса нет, и запускается в потоке, отделенном от контейнера сервлета.
Обычно вы сохраняете в некоторой форме состояния, которые вы хотели бы сделать доступными для bean-компонента, управляемого планировщиком (находясь в базе данных, в простом файле, в очереди и т. Д.)

Другие вопросы по тегам