来自Quartz Job的Null applicationContext

时间:2015-08-17 14:49:31

标签: spring quartz-scheduler

我有一个QuartzJobBean,我想从Quartz作业访问我的Spring Application Context。我按照following blog上的说明进行操作。但是,以下代码无法正常工作:

private ApplicationContext getApplicationContext(JobExecutionContext context ) throws Exception {

        System.err.println("check if variables are null - " + (context.getScheduler().getContext() == null));
        System.err.flush();

        ApplicationContext appCtx = (ApplicationContext)context.getScheduler().getContext().get(APPLICATION_CONTEXT_KEY);

        if (appCtx == null) {

            throw new JobExecutionException(

                    "No application context available in scheduler context for key /"" + APPLICATION_CONTEXT_KEY + "/"");

        }

        return appCtx;

    }

在运行时打印以下消息:

  

检查变量是否为null - false

     

密钥的调度程序上下文中没有可用的应用程序上下文   "的applicationContext"

我对我可能做错了什么感到有些困惑。是否有可能我的Spring应用程序上下文未命名" applicationContext"?如果是,那么Spring应用程序上下文的名称将在何处配置?关于为什么我的应用程序上下文为空的任何其他想法?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下步骤。

  1. 创建一个将实现ApplicationContextAware的类
  2. 将实现提供给方法
  3. 创建ApplicationContext的静态变量
  4. 在班级中获取该变量
  5. 代码看起来像。

    public class ApplicationUtils implements ApplicationContextAware {
    
        private static ApplicationContext ctx;
    
        @Override
        public void setApplicationContext(ApplicationContext appContext)
                throws BeansException {
            ctx = appContext;
    
        }
    
        public static ApplicationContext getApplicationContext() {
            return ctx;
        }
    }