Пример планировщика Spring 3 + Quartz 1.8.6

Пример планировщика 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.

Используемые инструменты:

  1. Весна 3.1.2. РЕЛИЗ

  2. Кварц 1.8.6

  3. Затмение 4.2

  4. 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 JobDetailBean
QuartzJobBean более гибкий и подходит для сложного планировщика. Вам нужно создать класс, расширяющий 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 КБ)