Доброго времени суток. В приложении на Spring + Hibernate мне понадобилось выполнять некую работу по расписанию, сделал по туторилам так:
@Service
public class ServerScanner implements RequestHandler
{
@Scheduled(fixedRate = 60000)
public void process()
{
doWork();
}
@Transactional
private void doWork()
{
// Some code with DAO here
}
@Autowired
private ServerDAO serverDAO;
}
В методе doWork() у меня есть обращение к полям с ленивой инициализацией, поэтому мне нужно, что бы открывалась сессия Hibernate'a во время выполнения этого метода.
Вот, что получается при срабатывании таймера. При этом, аналогичный код, помещенный в контроллер, работает нормально.
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
Попробовал добавить такую строчку в конфиг Hibernate'a:
<prop key="hibernate.current_session_context_class">thread</prop>
Теперь вылетает это:
org.hibernate.HibernateException: createQuery is not valid without active transaction
Подскажите, как правильно решать эту задачу?