2016-07-05 3 views
0

Это код, который я использовал для сохранения нового задания cron в базе данных postgresql. Но он показывает некоторые исключения времени компиляции. Я изначально перенесла кварц 1.8.6 в 2.2.1 с Весеннее загрузочное веб-приложение.Spring boot quartz 2.2.1 ошибка компиляции

enter image description here

private static final String JOBNAME = "sampleJobRunner"; 
    private static final String JOB_GROUPNAME = "sampleGroup"; 

    public void saveScheduledTime(String name) throws SchedulerException, ParseException { 
     Scheduler scheduler; 
     CronTrigger trigger; 
     String cronExp = null; 
     scheduler = this.quartzScheduler.getObject(); 
     trigger = (CronTrigger) scheduler.getTrigger(name, JOB_GROUPNAME); 
     if (scheduler != null) { 
       cronExp = "0 0 12 ? 1 MON#1 *"; 
      if (trigger != null) { 
       rescheduleJob(scheduler, trigger.getName(), cronExp); 
      } else { 
       createNewCronTrigger(scheduler, cronExp, name); 
      } 
     } 
    } 
    private void rescheduleJob(Scheduler scheduler, String triggerName, String cronExp) 
      throws SchedulerException, ParseException { 
     CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerName, JOB_GROUPNAME); 
     trigger.setCronExpression(cronExp); 
     scheduler.rescheduleJob(triggerName, JOB_GROUPNAME, trigger); 
    } 

    private void createNewCronTrigger(Scheduler scheduler, String cronExp, String sentType) 
      throws SchedulerException, ParseException { 
     CronTrigger trigger = new CronTrigger(sentType, JOB_GROUPNAME, JOBNAME, JOB_GROUPNAME, cronExp); 
     scheduler.scheduleJob(trigger); 
     scheduler.start(); 
    } 

Весна конфигурации загрузки кварцевых

@Configuration 
@ConditionalOnProperty(name = "quartz.enabled") 
public class SchedulerConfig { 
    @Bean 
    public JobFactory jobFactory(ApplicationContext applicationContext) { 
     AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory(); 
     jobFactory.setApplicationContext(applicationContext); 
     return jobFactory; 
    } 
    @Bean 
    public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource, JobFactory jobFactory, 
      @Qualifier("sampleJobTrigger") Trigger sampleJobTrigger) throws IOException { 
     SchedulerFactoryBean factory = new SchedulerFactoryBean(); 
     // this allows to update triggers in DB when updating settings in config 
     // file: 
     factory.setOverwriteExistingJobs(true); 
     factory.setDataSource(dataSource); 
     factory.setJobFactory(jobFactory); 
     factory.setQuartzProperties(quartzProperties()); 
     // factory.setTriggers(sampleJobTrigger); 
     return factory; 
    } 

    @Bean 
    public Properties quartzProperties() throws IOException { 
     PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean(); 
     propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties")); 
     propertiesFactoryBean.afterPropertiesSet(); 
     return propertiesFactoryBean.getObject(); 
    } 
    @Bean 
    public JobDetailFactoryBean sampleJobDetail() { 
     return createJobDetail(SampleJob.class); 
    } 
    @Bean(name = "sampleJobTrigger") 
    public SimpleTriggerFactoryBean sampleJobTrigger(@Qualifier("sampleJobDetail") JobDetail jobDetail, 
      @Value("${samplejob.frequency}") long frequency) { 
     return createTrigger(jobDetail, frequency); 
    } 
    private static JobDetailFactoryBean createJobDetail(Class jobClass) { 
     JobDetailFactoryBean factoryBean = new JobDetailFactoryBean(); 
     factoryBean.setJobClass(jobClass); 
     // job has to be durable to be stored in DB: 
     factoryBean.setDurability(true); 
     return factoryBean; 
    } 
    private static SimpleTriggerFactoryBean createTrigger(JobDetail jobDetail, long pollFrequencyMs) { 
     SimpleTriggerFactoryBean factoryBean = new SimpleTriggerFactoryBean(); 
     factoryBean.setJobDetail(jobDetail); 
     factoryBean.setStartDelay(0L); 
     factoryBean.setRepeatInterval(pollFrequencyMs); 
     factoryBean.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY); 
     // in case of misfire, ignore all missed triggers and continue : 
     factoryBean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT); 
     return factoryBean; 
    } 
} 
+0

Вы не указали какие-либо операторы импорта, поэтому мы не можем сказать, к каким типам вы обращаетесь. Также были бы полезны фактические ошибки компиляции. –

ответ

1

Чтобы исправить ошибки complilation в коде:

  • использование scheduler.getTrigger (новый TriggerKey (имя, JOB_GROUPNAME));
  • use scheduler.rescheduleJob (новый TriggerKey (имя, JOB_GROUPNAME), триггер);
  • литая CronTrigger к CronTriggerImpl, который имеет метод setCronExpression()

Посмотреть мой пример проекта для Spring загрузки + Кварц на GitHub: https://github.com/davidkiss/spring-boot-quartz-demo. Я обновил класс SchedulerConfig с новым createCronTrigger вспомогательного методом, который позволяет создавать хроны триггеров в Spring Boot:

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

Если вы используете Spring загрузку в вашем проекте, я считаю, используя класс SchedulerConfig является экологически чистым способом настройки кварца заданий в Spring Boot, а затем вызов метода saveScheduledTime().

Чтобы создать любые триггеры cron, я бы добавил дополнительные методы в класс SchedulerConfig, чтобы создать соответствующие триггерные компоненты, похожие на sampleJobTrigger.

+0

спасибо за ваш быстрый ответ ... Согласно вашему примеру на github мне нужно вызвать createCronTrigger (JobDetail jobDetail, String cronExpression). Но то, что эта деталь работа должна я pass.Below мои JobDetails JobDetail Работа = JobBuilder.newJob (SampleJob.class) \t \t \t \t .withIdentity (имя, "group1") построить(). – boycod3

+0

Пожалуйста, добавьте проект github с сохранением нового запуска cron. – boycod3

+0

См. Метод SchedulerConfig.sampleJobDetail() в качестве примера того, как создать компонент JobDetail, но вы также можете использовать код JobBuilder в своем комментарии – kaviddiss

Смежные вопросы