spring4+Quartz2控制台打印batch acquisition of 0triggers

spring配置如图:图片说明

RunQuartz实现InitializingBean进行初始化并注入schedulerFactoryBean,如果scope不设置为protorype就会报错如图:![图片说明](https://img-ask.csdn.net/upload/201708/03/1501752563_984249.png)

将scope设为protorype后定时任务就一直不执行,打印batch acquisition of 0 triggers。

RunQuartz代码如下:
public class RunQuartz implements InitializingBean{
private SchedulerFactoryBean schedulerFactoryBean;


@Override
public void afterPropertiesSet() throws Exception {
    System.out.println("++++++++++++++init方法");
    List<ScheduleJob> jobList = new ArrayList<>();
    for (int i = 0; i < 5; i++) {
        ScheduleJob job = new ScheduleJob();
        job.setJobId("10001" + i);
        job.setJobName("data_import" + i);
        job.setJobGroup("dataWork");
        job.setCronExpression("*/5 * * * * ?");
        jobList.add(job);
    }
    Scheduler scheduler = schedulerFactoryBean.getScheduler();
    for (ScheduleJob job : jobList) {

        TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobName(), job.getJobGroup());
        //获取trigger,即在spring配置文件中定义的 bean id="myTrigger"
        CronTrigger trigger = null;
        try {
            trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
        } catch (SchedulerException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        //不存在,创建一个
        if (null == trigger) {
            JobDetail jobDetail = JobBuilder.newJob(QuartzJobFactory.class)
                .withIdentity(job.getJobName(), job.getJobGroup()).build();
            jobDetail.getJobDataMap().put("scheduleJob", job);
            //表达式调度构建器
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
            //按新的cronExpression表达式构建一个新的trigger
            trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(), job.getJobGroup()).withSchedule(scheduleBuilder).build();
            try {
                scheduler.scheduleJob(jobDetail, trigger);
            } catch (SchedulerException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } else {
            // Trigger已存在,那么更新相应的定时设置
            //表达式调度构建器
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
            //按新的cronExpression表达式重新构建trigger
            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
                .withSchedule(scheduleBuilder).build();
            //按新的trigger重新设置job执行
            try {
                scheduler.rescheduleJob(triggerKey, trigger);
            } catch (SchedulerException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
public SchedulerFactoryBean getSchedulerFactoryBean() {
    return schedulerFactoryBean;
}
public void setSchedulerFactoryBean(SchedulerFactoryBean schedulerFactoryBean) {
    this.schedulerFactoryBean = schedulerFactoryBean;
}

}

http://blog.csdn.net/sjzylc/article/details/50866852

https://www.zhihu.com/question/30307618
我想这个应该能够帮到你