CLOUD PAAS / APPLICATION SETTINGS

การตั้งเวลา Job ด้วย Quartz

คู่มือนี้เรียบเรียงและปรับรูปแบบสำหรับ Ruk-Com Cloud PaaS ภาพหน้าจออาจแตกต่างเล็กน้อยตามเวอร์ชันของระบบ

คลิกหรือแตะภาพหน้าจอเพื่อดูรายละเอียดขนาดจริง

วัตถุประสงค์

บทความนี้อธิบายการใช้งาน การตั้งเวลา Job ด้วย Quartz บน Ruk-Com Cloud PaaS โดยจัดลำดับขั้นตอนและจุดตรวจสอบสำหรับการนำไปใช้งานจริง

ก่อนเริ่มดำเนินการ

  • เข้าสู่ระบบด้วยบัญชีที่มีสิทธิ์จัดการ Environment ที่เกี่ยวข้อง
  • ตรวจสอบชื่อ Environment, Region และทรัพยากรเป้าหมายก่อนบันทึกการเปลี่ยนแปลง
  • สำรองข้อมูลหรือกำหนดแผนย้อนกลับก่อนแก้ไขระบบ Production

ควอตซ์เป็นบริการจัดตารางเวลางาน open-source ที่มีฟีเจอร์ครบถ้วนซึ่งสามารถรวมหรือใช้ร่วมกับแอปพลิเคชัน Java ใดก็ได้ตั้งแต่แอปพลิเคชันแบบ stand-alone ที่เล็กที่สุดไปจนถึงระบบอีคอมเมิร์ซที่ใหญ่ที่สุด Quartz สามารถใช้เพื่อสร้างตารางเวลาที่เรียบง่ายหรือซับซ้อนสำหรับการดำเนินงานหลายสิบ ร้อย หรือแม้แต่หมื่นงาน; งานที่มีการกำหนดงาน Java มาตรฐานเป็นส่วนประกอบอาจมีการดำเนินการแทบทุกอย่างที่คุณตั้งโปรแกรมไว้ให้ทำ

หากแอปพลิเคชันของคุณมีงานที่ต้องเกิดขึ้นในช่วงเวลาใดก็ตามหรือหากระบบของคุณมีงานบำรุงรักษาที่เกิดขึ้นอีก Quartz อาจเป็นโซลูชันที่เหมาะสมที่สุดของคุณ

มาดูกันว่า Quartz ทำงานอย่างไรในคลาวด์

การสร้าง Environment

1. เข้าสู่ระบบ Ruk-Com Cloud Dashboard

2. คลิกปุ่ม New Environment

ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

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

ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

รอซักครู่เพื่อสร้าง environment ของคุณ

การสร้างแอปพลิเคชัน

1. สร้างเว็บแอปพลิเคชันของคุณ (ในกรณีของเราใช้แอปพลิเคชัน 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 ใหม่ซึ่งจะดำเนินการกับงานของคุณและนี่คือตัวอย่างซึ่งแสดงเวลาของเซิร์ฟเวอร์:

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. สร้างโปรเจกต์ของคุณเป็นไฟล์สงคราม

ปรับใช้แอปพลิเคชัน

1. กลับไปที่หน้า Ruk-Com Cloud Dashboard และอัปโหลดไฟล์ WAR ที่คุณเพิ่งสร้างขึ้น

ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

2. Deploy แอปพลิเคชันของคุณกับ environment ที่สร้างไว้ก่อนหน้านี้

ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

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

ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

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

ภาพประกอบขั้นตอนการใช้งาน Ruk-Com Cloud PaaS

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