繁体   English   中英

Spring Quartz:禁用Quartz调度程序

[英]Spring Quartz: Disable Quartz scheduler

我们提供石英调度程序的服务。

可以根据需要扩展此服务。

我们的Quartz调度程序不在集群模式下。

因此,我们需要根据环境变量启用或禁用调度程序。

服务不能分开以拥有两个独立的服务。

这是我们相关的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;
    }

}

有任何想法吗?

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

暂无
暂无

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

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