title: How to disable Quartz scheduler for dev and stg environment
body: <p>I have three environments dev, stg and prod server. I have a microservice project which is having quartz scheduler for sending daily report as email. The quartz configuration is as given below: </p>
  
  <p>Now the issue is that I want the quartz scheduler for sending daily report mail to register and run only on prod environment server. I dont want the scheduler to execute under stg and dev environment server.</p>
  
  <p>I am using AWS ec2 instances for environment server</p>
  
  <p>Can anyone please tell me how to do this. Do we have any simple configuration with which I can achieve this</p>
  
  <p><strong>AutowiringSpringBeanJobFactory.java</strong></p>
  
  <pre><code>public final class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware {
  
      private transient AutowireCapableBeanFactory beanFactory;
  
      @Override
      public void setApplicationContext(final ApplicationContext context) {
          beanFactory = context.getAutowireCapableBeanFactory();
      }
  
      @Override
      protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception {
          final Object job = super.createJobInstance(bundle);
          beanFactory.autowireBean(job);
          return job;
      }
  }
  </code></pre>
  
  <p><strong>QuartzConfiguration.java</strong></p>
  
  <pre><code>@Configuration
  @ConditionalOnProperty(name = "quartz.enabled")
  public class QuartzConfiguration {
  
      @Autowired
      List&lt;Trigger&gt; listOfTrigger;
  
      @Bean
      public JobFactory jobFactory(ApplicationContext applicationContext) {
          AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
          jobFactory.setApplicationContext(applicationContext);
          return jobFactory;
      }
  
      @Bean
      public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource, JobFactory jobFactory) throws IOException {
          SchedulerFactoryBean factory = new SchedulerFactoryBean();
          factory.setOverwriteExistingJobs(true);
          factory.setDataSource(dataSource);
          factory.setJobFactory(jobFactory);
          factory.setQuartzProperties(quartzProperties());
          if (!ApplicationUtil.isObjectEmpty(listOfTrigger)) {
              factory.setTriggers(listOfTrigger.toArray(new Trigger[listOfTrigger.size()]));
          }
  
          return factory;
      }
  
      @Bean
      public Properties quartzProperties() throws IOException {
          PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
          propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));
          propertiesFactoryBean.afterPropertiesSet();
          return propertiesFactoryBean.getObject();
      }
  
      public CronTriggerFactoryBean createCronTrigger(JobDetail jobDetail, String cronExpression) {
          CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
          factoryBean.setJobDetail(jobDetail);
          factoryBean.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
          factoryBean.setCronExpression(cronExpression);
          factoryBean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
          return factoryBean;
      }
  
      @SuppressWarnings("rawtypes")
      public JobDetailFactoryBean createJobDetail(Class jobClass) {
          JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
          factoryBean.setJobClass(jobClass);
          factoryBean.setDurability(true);
          return factoryBean;
      }
  
      @Bean
      public JobDetailFactoryBean dailyEmailJobDetail() {
          return createJobDetail(DailyReportScheduleJob.class);
      }
  
      @Bean(name = "dailyReportEmailSyncJobTrigger")
      public CronTriggerFactoryBean dailyReportEmailSyncJobTrigger(@Qualifier("dailyEmailJobDetail") JobDetail jobDetail, @Value("${cron.frequency.daily-report-trigger}") String frequency) {
          return createCronTrigger(jobDetail, frequency);
      }
  }
  </code></pre>
  
  <p><strong>quartz.properties</strong></p>
  
  <pre><code>org.quartz.scheduler.instanceName=springBootQuartzApp
  org.quartz.scheduler.instanceId=AUTO
  org.quartz.threadPool.threadCount=5
  org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
  org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
  org.quartz.jobStore.useProperties=true
  org.quartz.jobStore.misfireThreshold=60000
  org.quartz.jobStore.tablePrefix=quartz_
  org.quartz.jobStore.isClustered=true
  org.quartz.jobStore.clusterCheckinInterval=20000
  org.quartz.plugin.shutdownHook.class=org.quartz.plugins.management.ShutdownHookPlugin
  org.quartz.plugin.shutdownHook.cleanShutdown=TRUE
  </code></pre>
  
  <p><strong>bootstrap.yml</strong></p>
  
  <pre><code>quartz:
    enabled: true
  
  cron:
    frequency:
      daily-report-trigger: 0 0 9 1/1 * ? *
  </code></pre>