Quartz 产生未处理的空指针异常

马西亚兹

所以,我在不同的 Spring 配置文件上设置了 2 个调度程序。当我运行 Spring 调度程序时一切正常,但他们希望我实现 Quartz。

这是一个 Job 类:

@Profile("quartz")
@Component
public class SampleJob implements Job {

@Autowired
private GetDataServiceQuartz getDataServiceQuartz;

public SampleJob() {
}

public SampleJob(GetDataServiceQuartz getDataServiceQuartz) {
    this.getDataServiceQuartz = getDataServiceQuartz;
}

@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

    this.getDataServiceQuartz.storeData();
}
}

抛出一个错误:

org.quartz.SchedulerException: Job threw an unhandled exception.
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) ~[quartz-2.2.1.jar:na]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.2.1.jar:na]
Caused by: java.lang.NullPointerException: null
at com.example.blockchaininfo.services.Quartz.SampleJob.execute(SampleJob.java:27) ~[classes/:na]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[quartz-2.2.1.jar:na]
... 1 common frames omitted

AnullPointerException正在这条特定线上被抛出:

this.getDataServiceQuartz.storeData();

一旦我尝试打印this.getDataServiceQuartz它就会打印null.

完成所有后面工作的类:

@Slf4j
@Service
@Profile("quartz")
public class GetDataServiceQuartz{

constructorHere();

public void storeData(){

        try {
            String hashrateFromApi = this.getNetworkHashrateFromApi("http://public.turtlenode.io:11898/getinfo");
            OffsetDateTime date = OffsetDateTime.now();

            this.saveNetworkHashrateNewEntity(hashrateFromApi, date);
            this.storePoolDataToDB(this.getPoolsListFromJson(), retrieveNetworkIdForPoolDefinition(date));

        } catch (HttpServerErrorException e){
            log.info("Network Server error e1: " + e);
        } catch (ResourceAccessException e2){
            log.info("Network resource access exception: " + e2);
        } catch (IOException e3) {
            log.info("" + e3);
        } catch (InterruptedException e4){
            log.info("" + e4);
        }
}

...all other methods to acquire stuff.

和石英配置。

@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent){

    this.startQuartzScheduling();
}

public void startQuartzScheduling () {

    JobDetail job = JobBuilder.newJob(SampleJob.class)
            .withIdentity("dummyJobName", "group1").build();

    Trigger trigger = TriggerBuilder
            .newTrigger()
            .withIdentity("dummyTriggerName", "group1")
            .withSchedule(
                    SimpleScheduleBuilder.simpleSchedule()
                            .withIntervalInSeconds(5).repeatForever())
            .build();

    try {
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.start();
        scheduler.scheduleJob(job, trigger);
    } catch (SchedulerException e){
        log.info("" + e);
    }
}

我错过了什么?如何正确注入应该安排其方法的类?

鲁斯兰·阿洪多夫

我相信这是发生了,因为石英JobBuilder创建了你的新实例,SampleJob而不是使用创建的具有自动装配字段的实例因为它使用默认构造函数作为结果,所以你有空指针。

解决此问题的一种选择是将您的GetDataServiceQuartz置于调度程序上下文中。

此处描述

因此,要放置您的数据,您需要调用:

scheduler.getContext().put("getDataServiceQuartz", getDataServiceQuartz);

在执行任务时:

SchedulerContext schedulerContext = jobExecutionContext.getScheduler().getContext();
schedulerContext.get("getDataServiceQuartz");

其他,在我看来,更方便的方法是将它放在JobDataMap您可以从以下位置获得的位置SampleJob

job.getJobDataMap().put("getDataServiceQuartz", getDataServiceQuartz);

执行任务时:

context.getJobDetail().getJobDataMap().get("getDataServiceQuartz")

完整示例可以在这里找到

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

空引用异常未处理

来自分类Dev

Quartz-Scheduler:使用DailyTimeIntervalScheduleBuilder处理DST

来自分类Dev

指向char数组的指针,未处理的异常

来自分类Dev

Quartz的Quartz插件

来自分类Dev

调用OnPrepareOptionsMenu会产生空指针异常

来自分类Dev

调用OnPrepareOptionsMenu会产生空指针异常

来自分类Dev

Quartz错误失火处理和作业恢复失败

来自分类Dev

C:fopen(); 正在产生未处理的异常错误

来自分类Dev

Javafx 处理按钮 gettext 空指针异常

来自分类Dev

当集合为空时,UWP XAML抛出未处理的异常

来自分类Dev

任务未处理的异常

来自分类Dev

未处理格式异常

来自分类Dev

Java:未处理的异常

来自分类Dev

发生未处理的异常

来自分类Dev

Android未处理的异常

来自分类Dev

未处理的异常:NoSuchMethodException

来自分类Dev

属性文件似乎产生了空指针异常?

来自分类Dev

Event.BeginInvoke + Quartz.NET + FileSystemWatcher + Task.Run in loop =异常?

来自分类Dev

如果作业实例化失败,Quartz.NET 不会抛出异常

来自分类Dev

Quartz 调度程序异常,同时向调度程序添加失火指令

来自分类Dev

使用AdoJobStore在Quartz.net中自动处理作业并触发更改

来自分类Dev

重新启动服务器时如何处理Quartz简单触发

来自分类Dev

未处理的异常,原点未知

来自分类Dev

Azure serviceBusService的未处理异常

来自分类Dev

Java中未处理的异常

来自分类Dev

用户未处理MOQ异常

来自分类Dev

Ruby中未处理的异常

来自分类Dev

_CrtSetAllocHook-未处理的异常

来自分类Dev

WebBrowser引发未处理的异常