пружина + распорки2, впрыснуть DAO во внешнюю резьбу - PullRequest
0 голосов
/ 18 марта 2011

У меня есть веб-приложение, которое использует Struts2 + Spring для внедрения ресурсов, в основном мой DAO.Теперь я хотел бы создать поток, который периодически опрашивает базу данных и, при необходимости, отправляет уведомления по электронной почте пользователям.

Я хотел бы знать, как я могу реализовать это таким образом, чтобы этот поток мог использовать мой DAO,Я не смог управлять Spring, чтобы ввести его так, как я это сделал.Поэтому я хотел бы услышать предложения и посмотреть, может ли кто-нибудь указать мне правильный путь.

Прямо сейчас у меня есть поток, запущенный ServletContextListener, который просто создает таймер и планирует действие каждые 5 минут.Но я не могу заставить это действие использовать мой DAO.Мне не нужно использовать эту структуру, я открыт для использования любого решения.

Спасибо за вашу помощь!

Редактировать : Как и предлагал axtavtЯ использовал Spring Task Execution Scheduling, и он работает отлично, дело в том, что моя задача внедряется с помощью DAO, но затем я получаю LazyInitializationException каждый раз, когда пытаюсь получить доступ к свойству извлеченных объектов, любые предложения о том, как решить эту проблему?

1 Ответ

2 голосов
/ 18 марта 2011

Возможно, лучший вариант - использовать собственную поддержку планирования Spring, см. 25. Выполнение и планирование задач (при необходимости - с Кварц , см. 25.6 Использование OpenSymphony Quartz Scheduler ). Это приложение позволяет вам настроить запланированное действие как бины Spring, так что вы можете связать их с другими бинами, такими как DAO.

В качестве альтернативы вы можете использовать следующее для получения любого bean-компонента Spring в веб-приложении (например, для получения DAO из вашего потока):

WebApplicationContextUtils.getWebApplicationContext(servletContext).getBean(...)
...