1

I have seen a post with a solution that might work but it was 9 years ago.

public class MySchedulerFactoryBean extends org.springframework.scheduling.quartz.SchedulerFactoryBean {

    @Autowired
    private @Value("${enable.quartz.tasks}") boolean enableQuartzTasks;

    @Override
    public void afterPropertiesSet() throws Exception {
        if (enableQuartzTasks) {
            super.afterPropertiesSet();
        } 
    }
}

Are there any possible ways to use the same setting on this method?

@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
    SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
    schedulerFactoryBean.setTriggers(
            fpCronTriggerFactoryBean().getObject(),
            psCronTriggerFactoryBean().getObject(),
            ofbCronTriggerFactoryBean().getObject(),
            mglCronTriggerFactoryBean().getObject());

    return schedulerFactoryBean;
}

Basically, for example, I would like for fpCronTriggerFactoryBean().getObject() not to be triggered or any specific job instance in that manner by either true or false or 1 or 0 conditions.

UPDATE:

I think I may have figured out the configuration.

@Value("${enable.fp.quartz.tasks}")
private boolean enableFpQuartzTasks;

@Value("${enable.ps.quartz.tasks}")
private boolean enablePsQuartzTasks;

@Value("${enable.ofb.quartz.tasks}")
private boolean enableOfbQuartzTasks;

@Value("${enable.mgl.quartz.tasks}")
private boolean enableMglQuartzTasks;

@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
    SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();

    if (enableFpQuartzTasks) {
        schedulerFactoryBean.setTriggers(fpCronTriggerFactoryBean().getObject());
    }
    if (enablePsQuartzTasks) {
        schedulerFactoryBean.setTriggers(psCronTriggerFactoryBean().getObject());
    }
    if (enableOfbQuartzTasks) {
        schedulerFactoryBean.setTriggers(ofbCronTriggerFactoryBean().getObject());
    }
    if (enableMglQuartzTasks) {
        schedulerFactoryBean.setTriggers(mglCronTriggerFactoryBean().getObject());
    }

    return schedulerFactoryBean;
}

application.properties -

enable.fp.quartz.tasks = false
enable.ps.quartz.tasks = false
enable.ofb.quartz.tasks = false
enable.mgl.quartz.tasks = true

Now my question would be, is there a way to reiterate this into for each so that it could have one setting inside application.properties? Like 1 and 0 and space delimited? For example, enable.job.task= 0 0 1 1.

Any input is appreciated, thanks!

  • you can define a array property like https://stackoverflow.com/a/6412258/175554 then in a for loop you can enable disable beans. another and better option would be conditional beans https://stackoverflow.com/a/52184982/175554 last but not least you can use profiles https://stackoverflow.com/a/28782815/175554 – ozkanpakdil Sep 14 '21 at 23:17

0 Answers0