рабочие места пружина-стартер-стартер-кварц не запускаются - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь создать приложение, которое будет запускать два простых задания на основе cron с помощью spring-boot-starter-quartz. Вот мой код:

application.yml - кварцевый конфиг

 quartz:
job-store-type: jdbc
jdbc:
  initialize-schema: never
properties:
  org.quartz.scheduler.instanceName : instanceName
  org.quartz.scheduler-factory.auto-startup : true
  org.quartz.scheduler.instanceId : AUTO
  org.quartz.threadPool.threadCount : 10
  org.quartz.jobStore.driverDelegateClass : org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
  org.quartz.jobStore.isClustered : true

Вот как я сделал свой триггер для запуска задания:

QuartzScheduler.java

@Value("${cloud.aws.queues.queueName}")
private String queueName;

@Autowired
private Scheduler scheduler;

@Override
public void schedule(JobDTO jobDTO) {

    JobDetail job = JobBuilder.newJob()
                              .ofType(WriteToQueueQuartzJob.class)
                              .withIdentity("scheduleUnlockJob", "schedule")
                              .build();

    JobDataMap jobDataMap = new JobDataMap();
    jobDataMap.put("queueName", queueName);

    Trigger trigger = TriggerBuilder
            .newTrigger()
            .withIdentity("scheduleTrigger", "schedule")
            .startNow()
            .withSchedule(SimpleScheduleBuilder.repeatMinutelyForever())
            .usingJobData(jobDataMap)
            .build();

    try {
        scheduler.scheduleJob(job, trigger);
    } catch (SchedulerException e) {
        e.printStackTrace();
    }
}

Обычно я пытаюсь создать триггер, который будет вызывать задание для отправки в очередь. Поэтому я добавляю в JobData имя очереди удалений, и в моей работе я получаю следующее:

WriteToQueueQuartzJob.

@Setter
@NoArgsConstructor
public class WriteToQueueQuartzJob extends QuartzJobBean {

@Autowired
private QueueMessagingTemplate queueMessagingTemplate;

private String queueName;

@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
    System.out.println("job executed");
    queueMessagingTemplate.convertAndSend(queueName, "test");
}

}

Логи, которые я получаю:

2018-10-31 10:27:00.612  INFO 17232 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 0
2018-10-31 10:27:00.613  INFO 17232 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
2018-10-31 10:27:00.613  INFO 17232 --- [           main] o.s.i.channel.PublishSubscribeChannel    : Channel 'application-1.errorChannel' has 1 subscriber(s).
2018-10-31 10:27:00.613  INFO 17232 --- [           main] o.s.i.endpoint.EventDrivenConsumer       : started _org.springframework.integration.errorLogger
2018-10-31 10:27:00.613  INFO 17232 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 2147483647
2018-10-31 10:27:00.614  INFO 17232 --- [           main] o.s.s.quartz.SchedulerFactoryBean        : Starting Quartz Scheduler now
2018-10-31 10:27:00.629  INFO 17232 --- [           main] o.s.s.quartz.LocalDataSourceJobStore     : ClusterManager: detected 1 failed or restarted instances.
2018-10-31 10:27:00.629  INFO 17232 --- [           main] o.s.s.quartz.LocalDataSourceJobStore     : ClusterManager: Scanning for instance "CI000214961540974125118"'s failed in-progress jobs.
2018-10-31 10:27:00.638  INFO 17232 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler quartzScheduler_$_CI000214961540974411756 started.
2018-10-31 10:27:00.917  INFO 17232 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9020 (http) with context path ''
2018-10-31 10:27:00.933  INFO 17232 --- [           main] c.w.SchedulerMicroserviceApplication     : Started SchedulerMicroserviceApplication in 27.471 seconds (JVM running for 30.915)

В основном я хочу, чтобы мое приложение автоматически вызывало планировщик для запуска заданий. Я создал фиктивный контроллер для ручного вызова метода планировщика, и все работает как положено, задания регистрируются в кварцевых таблицах, а сообщение поступает в очередь. Однако я не смог найти ничего, чтобы заставить его работать автоматически без вызова.

...