Как проверить правильность работы Quartz в приложении Spring Boot - PullRequest
1 голос
/ 05 ноября 2019

Я хочу проверить, работает ли мой Кварцевый триггер так, как это предполагается на практике. Моя конфигурация Quartz выглядит так:

@Configuration
public class QuartzConfiguration {

  @Bean
  public JobDetail verificationTokenRemoverJobDetails() {
    return
        JobBuilder
            .newJob(VerificationTokenQuartzRemoverJob.class)
            .withIdentity("Job for verification token remover")
            .storeDurably()
            .build();
  }

  @Bean
  public Trigger verificationTokenRemoverJobTrigger(JobDetail jobADetails) {
    return
        TriggerBuilder
            .newTrigger()
            .forJob(jobADetails)
            .withIdentity("Trigger for verification token remover")
            .withSchedule(CronScheduleBuilder.cronSchedule("0 0 0/2 1/1 * ? *"))
            .build();
  }
}

, а мой класс Job выглядит следующим образом:

@AllArgsConstructor
public class VerificationTokenQuartzRemoverJob implements Job {

  private VerificationTokenRepository verificationTokenRepository;

  @Override
  public void execute(JobExecutionContext context) {
    verificationTokenRepository.deleteAllByCreatedLessThan(LocalDateTime.now().minusMinutes(30));
  }
}

Когда я запускаю приложение Spring Boot в журналах, я понимаю, что Job работает и запускаетсяциклический, но этого недостаточно для подтверждения правильной работы.

Вот почему я решил создать тест JUnit. Я нашел учебник: click , но владелец использовал предложение while (true), которое в соответствии с этой темой: click не является предпочтительным вариантом. Здесь возникает вопрос, есть ли какая-либо другая опция для проверки имени класса Job, идентификатора триггера и проверки, вызывается ли выражение CRON и конкретное задание как можно чаще?

Если возможно, буду благодарен за предложения о том, как достичь желаемого эффекта.

1 Ответ

1 голос
/ 05 ноября 2019

С SpringBoot Вы могли бы упростить выполнение следующих действий:

--- Вариант 1 ---

@Configuration
// This is important!
@EnableScheduling
public class Configuration{
 // TODO Change to 0 0 0/2 1/1 * ? *
 @Scheduled(cron = "0 15 10 15 * ?")
 public void scheduleTaskUsingCronExpression() {

    long now = System.currentTimeMillis() / 1000;
     System.out.println(
        "schedule tasks using cron jobs - " + now);
  }      

}

Полный пример: https://www.baeldung.com/spring-scheduled-tasks

--- Вариант 2-> Программно ---

@Configuration
@EnableScheduling

public class Configuration implements SchedulingConfigurer {
   @Bean(destroyMethod = "shutdown")
   public Executor taskExecutor() {
      return Executors.newScheduledThreadPool(100);
   }

    @Override
            public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
            CronTrigger cronTrigger
            = new CronTrigger("* * * * * *");

                    taskRegistrar.setScheduler(taskExecutor());
                    taskRegistrar.addTriggerTask(
                            new Runnable() {
                                @Override public void run() {
                                    System.out.println("RUN!!!");
                                }
                            },
                            cronTrigger
                    );
                }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...