因为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实例