Quartz执行方法无法访问其他类或Bean

时间:2018-09-19 08:56:11

标签: java spring-boot quartz-scheduler

很抱歉,如果编写中有任何错误,我已经使用quartz Scheduler创建了spring boot应用程序,我的问题是quartz execute方法未访问外部类或bean,它始终返回null,并且作业停止。

@Component
public class Sample1 implements ApplicationContextAware,ServletContextListener{
         private static ApplicationContext CONTEXT;
         private static StdSchedulerFactory factory = null;
         private static Scheduler sch;

     public void setApplicationContext(ApplicationContext context) throws BeansException {

          CONTEXT = context;
       }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        factory = new StdSchedulerFactory();
       try {
          sch=factory.getScheduler();
          sch.start();
        } catch (SchedulerException e) {
        // TODO Auto-generated catch block 
        }
   }

   @Override
   public void contextDestroyed(ServletContextEvent sce) {
     // TODO Auto-generated method stub
     contextDestroyed();
   }
}

这是启动石英调度程序的简单代码,它可以启动,并且作业也可以被触发,并且不在执行方法中开始执行

@PersistJobDataAfterExecution
public class TempExecutionJob implements Job,InterruptableJob{
  @Override
     public void execute(JobExecutionContext context) throws 
                                                     JobExecutionException {
     String ss=OtherClass.val1;
     System.out.println(ss);

    }
  }

这里OtherClass是一个简单的Java类,它具有一个静态变量val1,其值在服务器启动时设置,但是在执行作业时,它始终显示null,并且在调试模式下,悬停值是可见的,但是在执行中它需要null,我不这样做无法理解为什么会发生这种情况,请有人帮忙

1 个答案:

答案 0 :(得分:0)

我强烈建议遵循鲍里斯在聊天中提供的建议。将属性移动到application.yaml后,您可以使用SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

在工作中初始化spring上下文之后,应该可以访问它。