简体   繁体   English

Spring Quartz:禁用Quartz调度程序

[英]Spring Quartz: Disable Quartz scheduler

We have an service with a quartz scheduler. 我们提供石英调度程序的服务。

This service can be scaled accordingly some needs. 可以根据需要扩展此服务。

Our Quartz scheduler is not in a cluster mode. 我们的Quartz调度程序不在集群模式下。

So, we need to able or disable scheduler according to an environment variable. 因此,我们需要根据环境变量启用或禁用调度程序。

Service can't be splitted in order to have two independent services. 服务不能分开以拥有两个独立的服务。

This is our related Quartz configuration class: 这是我们相关的Quartz配置类:

@Configuration
public class QuartzSchedulerConfiguration {

    private static final String HOURLY_CRON_EXPRESSION = "0 0 * * * ?";
    private static final String MIDNIGHT_CRON_EXPRESSION = "0 0 0 * * ?";

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

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory, Trigger[] fitxersJobTrigger)
            throws IOException {
        SchedulerFactoryBean factory = new SchedulerFactoryBean();
        factory.setOverwriteExistingJobs(true);
        factory.setAutoStartup(true);
        factory.setJobFactory(jobFactory);
        factory.setQuartzProperties(quartzProperties());
        factory.setTriggers(fitxersJobTrigger);

        return factory;
    }

    @Bean
    public JobDetailFactoryBean loadPendingDocumentsJobDetail() {
        return createJobDetailFactoryBean(LoadPendingDocumentsJob.class);
    }

    @Bean
    public SimpleTriggerFactoryBean loadPendingDocumentsJobTrigger(
            @Qualifier("loadPendingDocumentsJobDetail") JobDetail jobDetail) {

        long interval = jobsConfiguration.get().getParameters().stream()
            .filter(param -> "loadPendingDocumentsJobInterval".equals(param.getName()))
            .findAny()
            .map(param -> (Integer)param.getValue())
            .orElse(600000); // every 10 minutes

        LOG.debug("loadPendingDocumentsJobInterval = " + interval);
        return createIntervalTriggerFactoryBean(jobDetail, interval);
    }

    private  CronTriggerFactoryBean createCronTriggerFactoryBean(JobDetail jobDetail, String expression) {
        CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
        factoryBean.setJobDetail(jobDetail);
        factoryBean.setCronExpression(expression);
        factoryBean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
        return factoryBean;
    }

    private JobDetailFactoryBean createJobDetailFactoryBean(Class<? extends Job> jobClass) {
        JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
        factoryBean.setJobClass(jobClass);
        factoryBean.setDurability(true);
        return factoryBean;
    }

    private SimpleTriggerFactoryBean createIntervalTriggerFactoryBean(JobDetail jobDetail, long interval) {
        SimpleTriggerFactoryBean factoryBean = new SimpleTriggerFactoryBean();
        factoryBean.setJobDetail(jobDetail);
        factoryBean.setStartDelay(0L);
        factoryBean.setRepeatInterval(interval);
        factoryBean.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
        factoryBean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
        return factoryBean;
    }

}

Any ideas? 有任何想法吗?

您可以尝试在配置类上使用@ConditionalOnProperty批注。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM