Spring Boot: планировщик Quartz

Spring Boot предлагает несколько удобств для работы с планировщиком Quartz, в том числе spring-boot-starter-quartz стартер. Если Quartz доступен, Scheduler (планировщик) автоматически настраивается (через абстракцию SchedulerFactoryBean).

Бины следующих типов автоматически выбираются и связываются с Scheduler:

  • JobDetail: определяет конкретный Job (задание). Экземпляры JobDetail могут быть созданы с помощью API JobBuilder.
  • Calendar
  • Trigger: определяет, когда конкретное задание запускается.

По умолчанию используется JobStore в памяти. Тем не менее, можно настроить хранилище на основе JDBC, если в вашем приложении доступен bean-компонент DataSource и если свойство spring.quartz.job-store-type настроено соответствующим образом, как показано в следующем примере:

spring.quartz.job-store-type=jdbc

Когда используется хранилище JDBC, схема может быть инициализирована при запуске, как показано в следующем примере:

spring.quartz.jdbc.initialize-schema=always

По умолчанию база данных обнаруживается и инициализируется с использованием стандартных сценариев, поставляемых с библиотекой Quartz. Эти сценарии удаляют существующие таблицы, удаляя все триггеры при каждом перезапуске. Также можно предоставить собственный скрипт, установив свойство spring.quartz.jdbc.schema.

Чтобы Quartz использовал DataSource, отличный от основного DataSource приложения, объявите компонент DataSource, аннотируя его метод @Bean с помощью @QuartzDataSource. Это гарантирует, что специфичный для Quartz DataSource используется как SchedulerFactoryBean, так и для инициализации схемы.

По умолчанию задания, созданные по конфигурации, не будут перезаписывать уже зарегистрированные задания, которые были прочитаны из постоянного хранилища заданий. Чтобы включить перезапись существующих определений заданий, установите свойство spring.quartz.overwrite-existing-jobs.

Конфигурацию Quartz Scheduler можно настроить с помощью свойств spring.quartz и bean-компонентов SchedulerFactoryBeanCustomizer, которые позволяют выполнять программную настройку SchedulerFactoryBean. Свойства расширенной конфигурации Quartz можно настроить с помощью spring.quartz.properties.*.

В частности, компонент Executor не связан с планировщиком, поскольку Quartz предлагает способ настройки планировщика с помощью spring.quartz.properties. Если вам нужно настроить исполнителя задач, рассмотрите возможность реализации SchedulerFactoryBeanCustomizer.

Задания (Jobs) могут определять сеттеры для добавления свойств карты данных. Обычные бины также могут вводиться аналогичным образом, как показано в следующем примере:

public class SampleJob extends QuartzJobBean {

    private MyService myService;

    private String name;

    // Внедряем "MyService" bean
    public void setMyService(MyService myService) { ... }

    // Внедряем свойство данных "name" задания
    public void setName(String name) { ... }

    @Override
    protected void executeInternal(JobExecutionContext context)
            throws JobExecutionException {
        ...
    }

}


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки