我有一个使用Struts2 + Spring进行资源注入的Web应用程序,基本上就是我的DAO。现在我想创建一个定期轮询数据库的线程,并在需要时向用户发送电子邮件通知。
我想知道如何以这个线程可以使用我的DAO的方式实现它。我无法管理Spring以我的方式注入它。所以我想听听建议,看看有人能指出我的正确方法。
现在我有一个由ServletContextListener启动的线程,它只创建一个计时器并每5分钟安排一次操作。但我不能让这个动作使用我的DAO。我没有必要使用这种结构,我愿意使用任何解决方案。
感谢您的帮助!
编辑:正如axtavt建议的那样,我使用了Spring任务执行调度,它运行得很好,我的任务是用DAO注入的,但每次我尝试访问时都会得到LazyInitializationException我获取的对象的属性,关于如何解决这个问题的任何建议??
答案 0 :(得分:2)
也许最好的选择是使用Spring自己的计划支持,请参阅25. Task Execution and Scheduling(如有必要,使用Quartz,请参阅25.6 Using the OpenSymphony Quartz Scheduler)。这个apporach允许您将计划的操作配置为Spring bean,因此您可以将它们与其他bean(如DAO)连接。
或者,您可以使用以下内容在Web应用程序中获取任何Spring bean(例如,从您的线程获取DAO):
WebApplicationContextUtils.getWebApplicationContext(servletContext).getBean(...)