Статьи

Пример планировщика Quartz 2

Quartz — это система планирования заданий с открытым исходным кодом. Его можно использовать для управления и планирования заданий в приложении.

ШАГ 1: СОЗДАТЬ MAVEN ПРОЕКТ

Maven проект создается как показано ниже. (Его можно создать с помощью Maven или IDE Plug-in).

Quartz2

ШАГ 2: БИБЛИОТЕКИ

Кварцевые зависимости добавляются в pom.xml Maven. Эти библиотеки зависимостей будут загружены Центральным репозиторием Maven.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 <modelVersion>4.0.0</modelVersion>
 <groupId>OTV_Quartz</groupId>
 <artifactId>OTV_Quartz</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 
 <dependencies>
 
  <!-- Quartz library -->
  <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>2.0.2</version>
  </dependency>  
 
  <!-- Log4j library -->
  <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.16</version>
  </dependency>
 
 </dependencies>
 
</project>

ШАГ 3: СОЗДАТЬ НОВУЮ РАБОТУ

Новое задание создается путем реализации интерфейса Quartz Job, как показано ниже. Класс TestJob определяет бизнес-логику, которая будет запланирована.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
package com.otv.job;
 
import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
 
public class TestJob implements Job {
 
   private Logger log = Logger.getLogger(TestJob.class);
 
   public void execute(JobExecutionContext jExeCtx) throws JobExecutionException {
      log.debug("TestJob run successfully...");
   }
 
}

ШАГ 4: СВЯЗЬ РАБОТЫ С ОБЪЕКТОМ JOBDETAIL

Созданный класс TestJob связан с объектом JobDetail.

1
2
3
JobDetail job = JobBuilder.newJob(TestJob.class)
       .withIdentity("testJob")
       .build();

ШАГ 5: СОЗДАЙТЕ НОВОГО ТРИГГЕРА

Новый триггер создается, как показано ниже. Класс триггера определяет период выполнения задания, которое будет запланировано. Есть два вида Кварцевых Триггеров как:

Триггер : указывает время начала, время окончания, период выполнения задания.

CronTrigger : указывает время начала, время окончания, период выполнения задания в соответствии с выражением cron Unix.

01
02
03
04
05
06
07
08
09
10
11
12
13
//Trigger the job to run on the next round minute
Trigger trigger = TriggerBuilder.newTrigger()
        .withSchedule(
                     SimpleScheduleBuilder.simpleSchedule()
                     .withIntervalInSeconds(30)
                     .repeatForever())
                                   .build();
 
// CronTrigger the job to run on the every 20 seconds
CronTrigger cronTrigger = TriggerBuilder.newTrigger()
                             .withIdentity("crontrigger","crontriggergroup1")
                             .withSchedule(CronScheduleBuilder.cronSchedule("10 * * * * ?"))
                             .build();

ШАГ 6: СОЗДАНИЕ SchedulerFactory

Создается новый SchedulerFactory, и объект Scheduler получается из класса SchedulerFactory.

1
2
SchedulerFactory schFactory = new StdSchedulerFactory();
Scheduler sch = schFactory.getScheduler();

ШАГ 7: ЗАПУСК планировщика

Объект планировщика запущен.

1
2
// Start the schedule
sch.start();

ШАГ 8: РАСПИСАНИЕ РАБОТЫ

TestJob запланирован:

1
2
// Tell quartz to schedule the job using the trigger
sch.scheduleJob(job, trigger);

ШАГ 9: ПОЛНЫЙ ПРИМЕР

TestJob будет выполняться два раза в минуту.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.otv;
 
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
 
import com.otv.job.TestJob;
 
/**
* @author onlinetechvision.com
* @since 17 Sept 2011
* @version 1.0.0
*
*/
public class JobScheduler {
 
   public static void main(String[] args) {
 
      try {
 
         // specify the job' s details..
         JobDetail job = JobBuilder.newJob(TestJob.class)
                                   .withIdentity("testJob")
                                   .build();
 
         // specify the running period of the job
         Trigger trigger = TriggerBuilder.newTrigger()
                                         .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                                                                            .withIntervalInSeconds(30)
                                                                            .repeatForever())
                                          .build();
 
         //schedule the job
         SchedulerFactory schFactory = new StdSchedulerFactory();
         Scheduler sch = schFactory.getScheduler();
         sch.start();
         sch.scheduleJob(job, trigger);
 
      } catch (SchedulerException e) {
         e.printStackTrace();
      }
   }
 
}

ШАГ 10: ВЫХОД

Когда класс JobScheduler запущен, вывод будет выглядеть так:

1
2
3
4
17.09.2011 23:39:37 DEBUG (TestJob.java:13) - TestJob run successfully...
17.09.2011 23:40:07 DEBUG (TestJob.java:13) - TestJob run successfully...
17.09.2011 23:40:37 DEBUG (TestJob.java:13) - TestJob run successfully...
17.09.2011 23:41:07 DEBUG (TestJob.java:13) - TestJob run successfully...

ШАГ 11: СКАЧАТЬ

Ссылка: Quartz 2 Scheduler от нашего партнера JCG Эрен Авсарогуллари в блоге Online Technology Vision .