【发布时间】: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