Java Quartz Scheduler

Quartz นั้นเป็น Scheduler ที่เป็นที่นิยมที่สุดของ Java ได้ยินชื่อมานานแล้วแต่ไม่เคยใช้

เพราะเมื่อก่อนใช้งาน Timer ของ Java เองมันก็ทำงานปกติดีไม่มีงอแง

แต่อยู่ๆหลังจากย้าย Server จาก CentOS มาเป็น Debian ปรากฏว่ามันทำงานปกติอยู่แค่แรกๆ หลังจากนั้นก็หายไปเลย

ลองปรับแล้วปรากฏว่ามันทำงานวันเว้นวัน หลังๆเว้นหลายๆวันถึงทำงานครั้ง ความน่าเชื่อถือไม่มีเลย

สุดท้ายทนไม่ไหวจึงต้องลองของหนักหน่อย ก็คือ Quartz Scheduler

แล้วก็หาตัวอย่างการใช้งานแบบง่ายที่สุดมาลองก็ไปเจอ Code ง่ายๆที่ jirawong.me (เป็น Blog คนไทย)

ไม่นึกว่ามันจะง่ายมากขนาดนี้ ง่ายกว่าที่คิด copy code มาใช้งานได้ทันที

แต่ติดปัญหานิดหน่อยคืออยากจะกำหนดการเริ่มงานเป็นเวลาอื่น ไม่ใช่เริ่มเลยตอนนี้

ตอนแรกก็เจอว่ามันน่าจะใช้ startDelay แต่ปรากฏว่าไม่ใช่เพราะการ Delay แต่มันก็เริ่มนับว่ามีการสั่งงานไปแล้ว

และมันก็จะสั่งงานสะสมมาเรื่อยๆ จาก repeatInterval แต่ยังไม่เริ่ม พอถึงเวลากำหนดมันทำงานที่สั่งที่ค้างรอทีเดียวทั้งหมดเลย

ซึ่งมันไม่ใช่แบบที่เราคิด คือเราต้องการให้มันยังไม่เริ่มแม้แต่งานเดียวค่อยไปเริ่มตามเวลาที่เรากำหนด

สุดท้ายก็ไปเจอว่ามันต้องไปกำหนดที่ตรง Trigger คือใช้ startAt(Date) เป็นตัวกำหนด

ส่วน Date ที่จะกำหนดให้ดูตัวอย่างจาก javapractices.com Schedule periodic tasks

วิธีการดูรายละเอียดของ schedule จาก mkyong

Code สำหรับทำ DailyTrigger

 

http://www.quartz-scheduler.org/

https://jirawong.me/2013/03/27/quartz-scheduler-example/

http://stackoverflow.com/questions/19051350/run-quartz-scheduler-job-with-specific-start-end-date-and-within-time-constrain

http://www.javapractices.com/topic/TopicAction.do?Id=54

http://www.mkyong.com/java/how-to-list-all-jobs-in-the-quartz-scheduler/

http://www.quartz-scheduler.org/documentation/quartz-2.x/cookbook/DailyTrigger.html