Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
Spring 如何使Quartz调度程序处于待机状态_Spring_Quartz Scheduler - Fatal编程技术网

Spring 如何使Quartz调度程序处于待机状态

Spring 如何使Quartz调度程序处于待机状态,spring,quartz-scheduler,Spring,Quartz Scheduler,我使用spring实现了quartz作业。我的调度程序运行良好,作业得到完美执行。 我的问题是如何使此计划程序处于待机状态?这样,一旦我决定将调度程序置于待机模式,就不会触发任何作业。 下面是职业分类 public class MyJobClass extends QuartzJobBean { //my job logic } applicationContext_Scheduler.xml中的代码段 <bean name="myJobBean" class="org.spring

我使用spring实现了quartz作业。我的调度程序运行良好,作业得到完美执行。 我的问题是如何使此计划程序处于待机状态?这样,一旦我决定将调度程序置于待机模式,就不会触发任何作业。 下面是职业分类

public class MyJobClass extends  QuartzJobBean  {
//my job logic
}
applicationContext_Scheduler.xml中的代码段

<bean name="myJobBean"
class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="MyJobClass" />
</bean>         
<bean id="rsHourlyJobCronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="myJobBean" />                       
<property name="cronExpression" value="00 0/1 * * * ?" />
</bean>

而不是用xml创建调度器bean。我将按以下程序制作:

@Configuration
public class QuartzSchedulerConfiguration {

  @Autowired
  private ApplicationContext applicationContext;

  @Bean
  public JobFactory jobFactory() {
    ApplicationContextHolder jobFactory = new ApplicationContextHolder();
    jobFactory.setApplicationContext(applicationContext);
    return jobFactory;
  }

  @Bean
  public SchedulerFactoryBean schedulerFactory() {
    SchedulerFactoryBean factory = new SchedulerFactoryBean();
    factory.setAutoStartup(true);
    factory.setSchedulerName("Quartz Scheduler");
    factory.setOverwriteExistingJobs(true);
    factory.setJobFactory(jobFactory());
    return factory;
  }
}

@Component
public final class ApplicationContextHolder extends SpringBeanJobFactory implements ApplicationContextAware {

  private static ApplicationContext context;

  private transient AutowireCapableBeanFactory beanFactory;

  @Override
  public void setApplicationContext(ApplicationContext ctx) throws BeansException {
    beanFactory = ctx.getAutowireCapableBeanFactory();
    context = ctx;
  }

  @Override
  protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception {
    final Object job = super.createJobInstance(bundle);
    beanFactory.autowireBean(job);
    return job;
  }

  public static ApplicationContext getContext() {
    return context;
  }
}
这将创建具有应用程序上下文意识的quartz调度程序bean,允许您将spring对象自动连接到quartz作业中

然后创建一些调度服务,如:

@Service
public class SchedulerService {

  @Autowired
  private SchedulerFactoryBean schedulerFactory;

  private Scheduler scheduler;

  @PostConstruct
  private void init() {
    scheduler = schedulerFactory.getScheduler();
  }

  public void standBy() throws Exception {
    if (scheduler != null && !scheduler.isInStandbyMode()) {
      scheduler.standby();
    }
  }
}

然后添加计划所需的其他方法。

谢谢Issac。我使用SchedulerFactoryBean让scheduler对象控制“启动”和“待机”模式