Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Autowire石英调度器_Java_Spring - Fatal编程技术网

Java Spring Autowire石英调度器

Java Spring Autowire石英调度器,java,spring,Java,Spring,我的web服务器上运行着一个quartz作业,通过Spring配置如下: @Configuration public class StatisticsJobConfig { @Bean public JobDetailBean jobDetailBean() { JobDetailBean jobDetailBean = new JobDetailBean(); jobDetailBean.setJobClass(StatisticsJob.cl

我的web服务器上运行着一个quartz作业,通过Spring配置如下:

@Configuration
public class StatisticsJobConfig {

    @Bean
    public JobDetailBean jobDetailBean() {
        JobDetailBean jobDetailBean = new JobDetailBean();
        jobDetailBean.setJobClass(StatisticsJob.class);
        jobDetailBean.setBeanName("statisticsJobBean");
        jobDetailBean.setName("statisticsJob");
        jobDetailBean.setGroup("default");
        return jobDetailBean;
    }

    @Bean
    public CronTriggerBean cronTriggerBean(@Qualifier("jobDetailBean") JobDetailBean jobDetailBean) throws ParseException {
        CronTriggerBean cronTriggerBean = new CronTriggerBean();

        cronTriggerBean.setBeanName("cronTriggerBean");
        cronTriggerBean.setJobDetail(jobDetailBean);
        cronTriggerBean.setCronExpression("0/5 * * * * ?");

        return cronTriggerBean;

    }

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(@Qualifier("cronTriggerBean") CronTriggerBean cronTriggerBean
            , @Qualifier ApplicationContext applicationContext) {
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setExposeSchedulerInRepository(true);

        schedulerFactoryBean.setTriggers(cronTriggerBean);

        AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
        jobFactory.setApplicationContext(applicationContext);
        schedulerFactoryBean.setJobFactory(jobFactory);

        return schedulerFactoryBean;
    }

    public void setCronExpression(String cronExpression) {
        this.cronExpression = cronExpression;
    }


}
(StatisticsJob类扩展了QuartzJobBean并实现了executeInternal方法)

服务器启动后,此作业根据cron表达式成功执行。然而,我也希望能够随意安排这项工作,就像用户按下按钮一样。为了做到这一点,我在控制器中创建了一个restful方法,我想在其上注入quartz调度程序,如下所示:

@RequestMapping(value = "/triggerJob", method = RequestMethod.GET)
    public ResponseEntity<String> triggerJob(@Qualifier StdSchedulerFactory schedulerFactory) {

        try {
            Scheduler scheduler = schedulerFactory.getScheduler();

            JobDetail jobDetail = new JobDetail("statisticsJob",StatisticsJob.class);


            scheduler.scheduleJob(jobDetail,TriggerUtils.makeImmediateTrigger("new",0, 0));


        } catch (SchedulerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return new ResponseEntity<>(HttpStatus.OK);

    }
@RequestMapping(value=“/triggerJob”,method=RequestMethod.GET)
公共响应触发作业(@Qualifier StdSchedulerFactory schedulerFactory){
试一试{
Scheduler Scheduler=schedulerFactory.getScheduler();
JobDetail JobDetail=新的JobDetail(“statisticsJob”,statisticsJob.class);
scheduleJob(jobDetail,TriggerUtils.MakeImmediateRigger(“新建”,0,0));
}捕获(调度){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回新的响应状态(HttpStatus.OK);
}

但是,即使在执行上述代码之后,作业也不会被调度。我做错了什么?还有其他方法可以尝试吗?

解决方案是在我的控制器中自动连接SchedulerFactoryBean本身,并在可通过它访问的调度器上调用rescheduleJob方法:

@Autowired
private SchedulerFactoryBean schedulerFactory;

@RequestMapping(value = "/triggerJob", method = RequestMethod.GET)
public ResponseEntity<String> triggerJob() {
    try {
        schedulerFactory.getScheduler().triggerJob("statisticsJob", "default");
    } catch (SchedulerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return new ResponseEntity<>(HttpStatus.OK);
}
@Autowired
私有SchedulerFactoryBean schedulerFactory;
@RequestMapping(value=“/triggerJob”,method=RequestMethod.GET)
公共责任触发工作(){
试一试{
schedulerFactory.getScheduler().triggerJob(“统计作业”,“默认”);
}捕获(调度){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回新的响应状态(HttpStatus.OK);
}

解决方案是在我的控制器中自动连接SchedulerFactoryBean本身,并在可通过它访问的调度器上调用rescheduleJob方法:

@Autowired
private SchedulerFactoryBean schedulerFactory;

@RequestMapping(value = "/triggerJob", method = RequestMethod.GET)
public ResponseEntity<String> triggerJob() {
    try {
        schedulerFactory.getScheduler().triggerJob("statisticsJob", "default");
    } catch (SchedulerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return new ResponseEntity<>(HttpStatus.OK);
}
@Autowired
私有SchedulerFactoryBean schedulerFactory;
@RequestMapping(value=“/triggerJob”,method=RequestMethod.GET)
公共责任触发工作(){
试一试{
schedulerFactory.getScheduler().triggerJob(“统计作业”,“默认”);
}捕获(调度){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回新的响应状态(HttpStatus.OK);
}