2017-01-22 3 views
0

zu planen Ich habe einen kleinen Spring Boot Dienst geschrieben, der Quartz verwendet. Ich versuche, einen Job mit dem folgenden Code zu planen. Ich erhalte jedoch wiederholt den folgenden Fehler:Nicht in der Lage, Quarzuhr

ERROR[my-service] [2017-01-22 17:38:37,328] [] [main] [SpringApplication]: Application startup failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schedulerFactoryBean' defined in class path resource [com/myservice/configuration/QuartzConfiguration.class]: Invocation of init method failed; nested exception is org.quartz.JobPersistenceException: Couldn't store trigger 'group1.trigger1' for 'group1.job1' job:The job (group1.job1) referenced by the trigger does not exist. [See nested exception: org.quartz.JobPersistenceException: The job (group1.job1) referenced by the trigger does not exist.] 

unnötig zu sagen, der Job wird nie geplant. Hier ist der relevante Code:

@Slf4j 
@NoArgsConstructor 
public class TimedJob implements Job { 
    @Override 
    public void execute(JobExecutionContext context) throws JobExecutionException { 
     log.debug("**********timed job****************"); 
    } 
} 

@Configuration 
public class QuartzConfiguration { 
... 
    @Inject 
    MyDao myDao; 

    @Bean 
    public SchedulerFactoryBean schedulerFactoryBean(ApplicationContext applicationContext) throws SchedulerException { 

     SchedulerFactoryBean factory = new SchedulerFactoryBean(); 

     factory.setAutoStartup(true); 
     factory.setOverwriteExistingJobs(true); 

     QuartzJobFactory jobFactory = new QuartzJobFactory(); 
     jobFactory.setApplicationContext(applicationContext); 
     factory.setJobFactory(jobFactory); 

     factory.setDataSource(dataSource()); 
     factory.setSchedulerContextAsMap(Collections.singletonMap("my_dao", myDao)); 

     JobDetail jobDetail = JobBuilder.newJob() 
       .ofType(TimedJob.class) 
       .storeDurably() 
       .withDescription("desc") 
       .withIdentity("job1", "group1") 
       .build(); 

     Calendar calendar = Calendar.getInstance(); 
     calendar.add(Calendar.SECOND, 10); 
     Trigger trigger = TriggerBuilder 
       .newTrigger() 
       .startAt(calendar.getTime()) 
       .withSchedule(
         SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever() 
       ) 
       .forJob(jobDetail) 
       .withIdentity("trigger1", "group1") 
       .build(); 
     factory.setTriggers(trigger); 

     Properties quartzProperties = new Properties(); 
     quartzProperties.setProperty("org.quartz.scheduler.instanceName", instanceName); 
     quartzProperties.setProperty("org.quartz.scheduler.instanceId", instanceId); 
     quartzProperties.setProperty("org.quartz.threadPool.threadCount", threadCount); 
     quartzProperties.setProperty("org.quartz.jobStore.driverDelegateClass", driverDelegateClassName); 
     factory.setQuartzProperties(quartzProperties); 

     factory.start(); 

     return factory; 
    } 

Dies ist fast genau kopiert von den Quarz-Tutorials here. Was mache ich falsch?

+0

versuchen Sie, '@EnableScheduling' zu verwenden, um die automatische Konfiguration zu konfigurieren und '@Scheduled' Annotation als alternative Methode zu verwenden – rajadilipkolli

Antwort