Как сделать так, чтобы метод @Schedule вызывался только один раз за раз - PullRequest
3 голосов
/ 17 ноября 2011

Мы используем аннотацию @Schedule EJB для запуска запланированного задания. Делаем дельта-SOLR-импорт каждые x секунд. Конечно, мы хотим, чтобы индексирование было как можно меньше. В настоящее время я пытаюсь делать дельту каждые 5 секунд.

Итак, мой вопрос: могу ли я убедиться, что работа вызывается только один раз? Допустим, индексация длится дольше 5 секунд, будет ли следующий вызов расписания ждать, пока не вернется предыдущий?

1 Ответ

3 голосов
/ 17 ноября 2011

Да.Вы можете сделать bean-компонент @Singleton и использовать @Lock(LockType.Write), чтобы таймеры не работали параллельно.Обратите внимание, что LockType.Write является значением по умолчанию в синглтоне.Поэтому даже явное упоминание с аннотацией не потребуется.

...