读书人

在Job中使用ServletContext的解决办法

发布时间: 2012-09-05 15:19:35 作者: rapoo

在Job中使用ServletContext的解决方法

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

读书人网 >软件架构设计

热点推荐