因为quartz线程不是一个HTTP请求,不存在request对象,无法取得servletContext,但是可以通过定义一个静态变量:ServletContext context,通过在服务器启动的时候进行初始化(采用listener或者servlet)。
代码:
public class JobContextListener implements ServletContextListener { public void contextDestroyed(ServletContextEvent servletcontextevent) { // TODO Auto-generated method stub } public void contextInitialized(ServletContextEvent servletcontextevent) { // TODO Auto-generated method stub JobContext.getInstance().setContext(servletcontextevent.getServletContext()); } } public class JobContext { private final static JobContext instance = new JobContext(); private static ServletContext context; private JobContext() { } public static JobContext getInstance() { return instance; } protected void setContext(ServletContext context2) { context = context2; } public ServletContext getContext() { return context; } }
在web.xml中添加
<!-- 任务监听程序 --> <listener> <listener-class>cms.module.quartz.JobContextListener</listener-class> </listener>
在Job类的excute方法中使用ServletContext scontext = JobContext.getInstance().getContext();即可取得ServletContext。
使用
ServletContext scontext = JobContext.getInstance().getContext(); ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(scontext); quartzIndexPageService = (ISitePage)ctx.getBean("quartzIndexPageService");
就可以取得spring注入的bean实例