在Spring Boot中部署Quartz时发生NullPointerException [英] NullPointerException while deploying Quartz in Spring Boot

查看:70
本文介绍了在Spring Boot中部署Quartz时发生NullPointerException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将Quartz 2.2.1与Spring Boot一起使用.我试图声明一个计划的任务,该任务应该将一些数据写入文件中.我的工作定义如下:

I am trying to use Quartz 2.2.1 with spring boot. Im trying to declare a scheduled task that is supposed to write some datas into a file. My Job is defined like below :

public class JobTask implements Job {

@Autowired
JobController controller;

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

                try {
                    controller.doPrintData();
                } catch (Exception e) {
                    e.printStackTrace();
                }
    }
}

然后:

public class StartJob {

  public static void main(final String[] args) {
    final SchedulerFactory factory = new StdSchedulerFactory();
    Scheduler scheduler;
    try {
        scheduler = factory.getScheduler();
        scheduler.start();
    } catch (SchedulerException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }


    try {
      scheduler = factory.getScheduler();

      final JobDetailImpl jobDetail = new JobDetailImpl();
      jobDetail.setName("My job");
      jobDetail.setJobClass(JobTask.class);

      final SimpleTriggerImpl simpleTrigger = new SimpleTriggerImpl();
      simpleTrigger.setStartTime(new Date(System.currentTimeMillis() + 5000));
      //simpleTrigger.setStartTime(dateOf(12, 58, 00,06,05,2016));
      simpleTrigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
      simpleTrigger.setRepeatInterval(5000);
      simpleTrigger.setName("Trigger execution every 5 secondes");

      scheduler.start();
      scheduler.scheduleJob(jobDetail, simpleTrigger);

      System.in.read();
      if (scheduler != null) {
        scheduler.shutdown();
      }
    } catch (final SchedulerException e) {
      e.printStackTrace();
    } catch (final IOException e) {
      e.printStackTrace();
    }
  }
}

PS:我已经测试了控制器方法"doPrintData",并且可以正常工作.但是,当我将它放在execute方法中时,它会面对 javaNullPointerException .

PS : I have tested my controller method 'doPrintData' and it works. But when I put it inside the execute method im facing the javaNullPointerException.

推荐答案

Spring Boot会为您管理它.删除石英依赖项,然后创建一个 Service 用于安排执行时间:

Spring Boot manages it for you. Remove the quartz dependency and just create a Service for having scheduled executions:

@Service
public class JobScheduler{

    @Autowired
    JobController controller;

    //Executes each 5000 ms
    @Scheduled(fixedRate=5000)
    public void performJob() {
        controller.doPrintData();
    }
}

并为您的应用程序启用任务计划:

And enable the task scheduling for your application:

@SpringBootApplication
@EnableScheduling
public class Application {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class);
    }
}

另请参见:

这篇关于在Spring Boot中部署Quartz时发生NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆