【问题标题】:Quartz execute method not accessing other class or beansQuartz执行方法不访问其他类或bean
【发布时间】:2018-09-21 05:37:34
【问题描述】:

抱歉,如果有任何写作错误,我已经使用石英调度程序创建了 spring boot 应用程序,我的问题是石英执行方法没有访问外部类或 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,我不'不明白为什么会发生这种情况,如果有人可以提供帮助,请提供帮助

【问题讨论】:

  • 拥有一个公共变量val1 违反了类封装。它的目的是什么?您是否有任何证据表明“值是在服务器启动时设置的”?
  • @Boris 在另一个类中获取一些值,它工作正常,因此值设置正确
  • 如果设置了值,那怎么会是null呢?
  • @Boris 是的,这就是我没有得到它的问题,即使在调试模式下悬停该变量值也会显示,但执行时会打印 null
  • OtherClass 是如何初始化和实例化的?你为什么还要使用公共变量?

标签: java spring-boot quartz-scheduler


【解决方案1】:

我强烈建议听从 Boris 在聊天中提供的建议。将属性移动到 application.yaml 后,您应该能够在使用 SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); 初始化工作中的 spring 上下文后访问它

【讨论】:

  • 它不仅与我无法做到的一个变量相关,而且其他 bean 和类也无法访问,因为石英和弹簧在不同的上下文中工作,它们彼此不知道所以我找到的最好的解决方案是这个link,它可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 2014-09-05
  • 2010-12-12
  • 1970-01-01
  • 2013-09-04
  • 2014-09-25
相关资源
最近更新 更多