很抱歉,如果编写中有任何错误,我已经使用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,我不这样做无法理解为什么会发生这种情况,请有人帮忙
答案 0 :(得分:0)
我强烈建议遵循鲍里斯在聊天中提供的建议。将属性移动到application.yaml后,您可以使用SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);