Quartz Scheduler เป็น Open Source Project นิยมนำมาใช้งานกับโปรเจคระดับองค์กร ทำหน้าที่เป็นเครื่องมือจัดการเรื่อง Job Scheduler คล้ายกับ Cron ในระบบปฏิบัติการ linux ช่วยจัดการเรื่อง Job ที่มีการทำงานตั้งแต่ 1 Process ขึ้นไปใช้กับงาน Process ที่ต้องใช้เวลาในการ Processing ยาวนานกินเวลาหลายชั่วโมง ภายใน quartz-scheduler จะมี Class CronTrigger ซึ่งช่วยทำหน้าที่จัดการเวลาการทำงาน เช่น “ตอน 8.00 น.ทุกวันจันทร์ถึงวันศุกร์” หรือ “เวลา 1.30 น. ทุกวันศุกร์สุดท้ายของเดือน” ช่วยเพิ่มประสิทธิภาพการจัด scheduler ได้ออย่างดี
เริ่มต้นการใช้งาน
เพิ่ม dependency ในไฟล์ pom.xml
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>1.8.6</version> </dependency>
สร้าง Class Job Execute
public class DumbJob implements Job{
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("Poolsawat.com Run Scheduler Job");
}
}
ตัวอย่าง ตั้งเวลาการทำงานทุกนาที โดยเริ่มทำงานตอนทำงานในนาทีถัดไปหลังจากสั่งเริ่มการทำงาน
try {
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
Scheduler sched = schedFact.getScheduler();
sched.start();
JobDetail jobDetail = new JobDetail("myJob", null, DumbJob.class);
Trigger trigger = TriggerUtils.makeMinutelyTrigger();
trigger.setStartTime(TriggerUtils.getEvenMinuteDate(new Date()));
trigger.setName("myTrigger");
sched.scheduleJob(jobDetail, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
ตัวอย่าง ตั้งเวลาการทำงานช่วงเวลา 00:00 น. โดยเริ่มทำงานทันที่
try {
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
Scheduler sched = schedFact.getScheduler();
JobDetail jobDetail = new JobDetail("myJob",
Scheduler.DEFAULT_GROUP,
DumbJob.class);
Trigger trigger = TriggerUtils.makeDailyTrigger(0, 0);
trigger.setStartTime(new Date());
trigger.setName("myTrigger");
sched.scheduleJob(jobDetail, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
สร้าง Class Job ที่รับ Parameter
public class DataMapJob implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDetail detail = context.getJobDetail();
JobDataMap mapData = detail.getJobDataMap();
System.out.println("param1 ::=="+mapData.getString("param1"));
System.out.println("param2 ::=="+mapData.getString("param2"));
}
}
ตัวอย่าง การส่งค่า Parameter เข้า Process ภายใน Class Job
try {
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
Scheduler sched = schedFact.getScheduler();
sched.start();
JobDetail jobDetail = new JobDetail("myJob", null, DataMapJob.class);
JobDataMap dataMap = new JobDataMap();
dataMap.put("param1", "poolsawat.com");
dataMap.put("param2", "quartz");
jobDetail.setJobDataMap(dataMap);
Trigger trigger = TriggerUtils.makeMinutelyTrigger();
trigger.setStartTime(TriggerUtils.getEvenMinuteDate(new Date()));
trigger.setName("myTrigger");
sched.scheduleJob(jobDetail, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
ตัวอย่าง ตั้งค่าใน Job ทำงานแค่ครั้งเดียว
try {
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
Scheduler sched = schedFact.getScheduler();
sched.start();
JobDetail jobDetail = new JobDetail("myJob", null, DataMapJob.class);
SimpleTrigger trigger = new SimpleTrigger("myTrigger",
null,
new Date(),
null,
0,
0L);
sched.scheduleJob(jobDetail, trigger);
} catch (Exception e) {
e.printStackTrace();
}