การตั้งเวลา Job ด้วย Quartz
คู่มือนี้เรียบเรียงสำหรับ Ruk-Com PaaS หน้าจอและตัวเลือกอาจแตกต่างตามเวอร์ชันและสิทธิ์ของบัญชี
ตรวจสอบ Environment, Region, สิทธิ์บัญชี และสำรองค่าปัจจุบันก่อนดำเนินการกับระบบจริง
วัตถุประสงค์
บทความนี้อธิบายการตั้งเวลา Job ด้วย Quartz บน Ruk-Com Cloud PaaS โดยจัดลำดับขั้นตอนและจุดตรวจสอบสำหรับการนำไปใช้งานจริง
ก่อนเริ่มดำเนินการ
- เข้าสู่ระบบด้วยบัญชีที่มีสิทธิ์จัดการ Environment ที่เกี่ยวข้อง
- ตรวจสอบชื่อ Environment, Region และ Resource เป้าหมายก่อนบันทึกการเปลี่ยนแปลง
- สำรองข้อมูลหรือกำหนดแผนย้อนกลับก่อนแก้ไขระบบ Production
ควอตซ์เป็นบริการจัดตารางเวลางาน open-source ที่มีฟีเจอร์ครบถ้วนซึ่งสามารถรวมหรือใช้ร่วมกับ Application Java ใดก็ได้ตั้งแต่ Application แบบ stand-alone ที่เล็กที่สุดไปจนถึงระบบอีคอมเมิร์ซที่ใหญ่ที่สุด Quartz สามารถใช้เพื่อสร้างตารางเวลาที่เรียบง่ายหรือซับซ้อนสำหรับการดำเนินงานหลายสิบ ร้อย หรือแม้แต่หมื่นงาน; งานที่มีการกำหนดงาน Java มาตรฐานเป็นส่วนประกอบอาจมีการดำเนินการแทบทุกอย่างที่คุณตั้งโปรแกรมไว้ให้ทำ
หาก Application ของคุณมีงานที่ต้องเกิดขึ้นในช่วงเวลาใดก็ตามหรือหากระบบของคุณมีงานบำรุงรักษาที่เกิดขึ้นอีก Quartz อาจเป็นโซลูชันที่เหมาะสมที่สุดของคุณ
มาดูกันว่า Quartz ทำงานอย่างไรใน Cloud
การสร้าง Environment
1. เข้าสู่ระบบ Ruk-Com Cloud Dashboard
2. คลิกปุ่ม New Environment

3. เลือก Tomcat เป็น Application Server และตั้งค่าขีดจำกัด cloudlet จากนั้นใส่ชื่อ environment ตัวอย่างเช่นควอตซ์และคลิกสร้าง

รอซักครู่เพื่อสร้าง environment ของคุณ
การสร้าง Application
1. สร้างเว็บ Application ของคุณ (ในกรณีของเราใช้ Application Maven) และเพิ่มไฟล์ pom.xml เพื่อรวม Quartz libraries เข้ากับโปรเจกต์ของคุณ
<!-- Quartz API -->
<dependency>
<groupId>opensymphony</groupId>
<artifactId>quartz</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.directory.studio</groupId>
<artifactId>org.apache.commons.logging</artifactId>
<version>1.1.1</version>
</dependency>
2. สร้างโปรเจกต์ของคุณ
3. สร้าง Java class ใหม่ซึ่งจะดำเนินการกับงานของคุณและนี่คือตัวอย่างซึ่งแสดงเวลาของ Server:
package com;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job
{
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("Server Time: " + new Date());
}
}
4. สร้าง Servlet ใหม่ (คุณสามารถใช้ logic อื่นได้อย่างง่ายดาย) และระบุ Quartz trigger เพื่อกำหนดเหตุการณ์ตารางเวลาที่ Quartz จะรันงานของคุณ ในกรณีของเราได้สร้าง QuartzServlet.java ซึ่งมีคำสั่ง (การบันทึกที่ดำเนินการในคลาส HelloJob) ที่ดำเนินการทุกนาที
package com;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
JobDetail job = new JobDetail();
job.setName("dummyJobName");
job.setJobClass(HelloJob.class);
CronTrigger trigger = new CronTrigger();
trigger.setName("TriggerName");
trigger.setCronExpression("0 */1 * * * ?");
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
} catch (SchedulerException ex) {
Logger.getLogger(QuartzServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (ParseException ex) {
Logger.getLogger(QuartzServlet.class.getName()).log(Level.SEVERE, null, ex);
} finally {
out.close();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
public String getServletInfo() {
return "Short description";
}
}
5. สร้างโปรเจกต์ของคุณเป็นไฟล์สงคราม
DeployApplication
1. กลับไปที่หน้า Ruk-Com Cloud Dashboard และอัปโหลดไฟล์ WAR ที่คุณเพิ่งสร้างขึ้น

2. Deploy Application ของคุณกับ environment ที่สร้างไว้ก่อนหน้านี้

3. เปิดแอปของคุณใน Browser และตรวจสอบผลลัพธ์ ในกรณีของเราให้ไปที่ quartz context (http://{env_name}.{hoster_domain}/quartz ตามการแมป Servlet “QuartzServlet”) และตรวจสอบบันทึกการใช้งาน Application logs

คุณจะเห็นการจัดตารางงานโดยใช้ Quartz ทำงานได้อย่างมีเสน่ห์

เราหวังว่าคำแนะนำเกี่ยวกับการ deploy Quartz จะเป็นประโยชน์สำหรับคุณ
