Пример планировщика Spring 3 + Quartz 1.8.6
Updated on 25 July 2012 - статья об обновлении для использования Spring 3 и Quartz 1.8.6 (это были Spring 2.5.6 и Quartz 1.6)
В этом руководстве мы покажем вам, как интегрировать Spring с каркасом планировщика Quartz. Spring поставляется с множеством удобных классов для поддержки Quartz и разделения вашего класса на API Quartz.
Используемые инструменты:
-
Весна 3.1.2. РЕЛИЗ
-
Кварц 1.8.6
-
Затмение 4.2
-
Maven 3
Why NOT Quartz 2?
В настоящее время Spring 3 все еще НЕ поддерживает API Quartz 2, см. этотSPR-8581 bug report. Обновит эту статью снова, как только будет выпущена исправленная ошибка.
1. Зависимость проекта
Для интеграции Spring 3 и Quartz 1.8.6 необходимы следующие зависимости.
Файл: pom.xml
...... org.springframework spring-core 3.1.2.RELEASE org.springframework spring-context-support 3.1.2.RELEASE org.springframework spring-tx 3.1.2.RELEASE org.quartz-scheduler quartz 1.8.6
2. Задача планировщика
Создайте обычный Java-класс, это класс, который вы хотите запланировать в Quartz.
Файл: RunMeTask.java
package com.example.common; public class RunMeTask { public void printMe() { System.out.println("Spring 3 + Quartz 1.8.6 ~"); } }
3. Объявить задание Quartz Scheduler
С помощью Spring вы можете объявить задание Quartz двумя способами:
3.1 MethodInvokingJobDetailFactoryBean
Это самый простой и понятный метод, подходящий для простого планировщика.
3.2 JobDetailBeanQuartzJobBean
более гибкий и подходит для сложного планировщика. Вам нужно создать класс, расширяющий SpringQuartzJobBean
, и определить метод, который вы хотите запланировать в методеexecuteInternal()
, и передать задачу планировщика (RunMeTask) через метод установки.
Файл: RunMeJob.java
package com.example.common; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class RunMeJob extends QuartzJobBean { private RunMeTask runMeTask; public void setRunMeTask(RunMeTask runMeTask) { this.runMeTask = runMeTask; } protected void executeInternal(JobExecutionContext context) throws JobExecutionException { runMeTask.printMe(); } }
Настройте целевой класс черезjobClass
и метод для запуска черезjobDataAsMap
.
4. Спусковой крючок
Настройте триггер Quartz, чтобы определить, когда будет запускаться ваше задание планировщика. Поддерживаются два типа триггеров:
4.1 SimpleTrigger
Позволяет установить время начала, время окончания, интервал повтора для запуска вашего задания.
4.2 CronTrigger
Это позволяет выражению cron Unix указывать дату и время для запуска вашего задания.
Note
Выражение cron в Unix очень гибкое и мощное, подробнее читайте на следующих веб-сайтах:
5. Планировщик Фабрика
Создайте фабричный компонент Scheduler, чтобы объединить вместе детали задания и триггер.
6. Файл конфигурации Spring Bean
Завершите файл конфигурации bean-компонента Spring.
Файл: Spring-Quartz.xml
7. Demo
Запустите ~
package com.example.common; import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main( String[] args ) throws Exception { new ClassPathXmlApplicationContext("Spring-Quartz.xml"); } }
Вывод на консоль.
Jul 25, 2012 3:23:09 PM org.springframework.scheduling.quartz.SchedulerFactoryBean startScheduler INFO: Starting Quartz Scheduler now Spring 3 + Quartz 1.8.6 ~ //run every 5 seconds Spring 3 + Quartz 1.8.6 ~
Скачать исходный код
Скачать -Spring3-Quartz-Example.zip (25 КБ)