首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Quartz:禁用Quartz调度程序

Spring Quartz:禁用Quartz调度程序
EN

Stack Overflow用户
提问于 2019-08-23 06:37:10
回答 1查看 1.5K关注 0票数 1

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

此服务可以相应地扩展某些需求。

我们的Quartz调度程序没有处于群集模式.

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

服务不能为了有两个独立的服务而分裂。

这是我们相关的Quartz配置类:

代码语言:javascript
复制
@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;
    }

}

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-08-23 10:35:01

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57621006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档