Langsung ke konten utama

Quartz Scheduler

Pada umumnya program perangkat lunak yang dijalankan secara reguler membutuhkan aplikasi scheduler dengan range waktu yang dapat ditentukan oleh pengguna. Pada sistem operasi Linux ada aplikasi scheduler secara default yaitu Crontab. Namun, program itu terbatas pada range minimal adalah menit (bukan detik). Pengalaman saya dalam menggunakan program Crontab dalam menjalankan banyak aplikasi java di server, sering mengalami error dan harus menggunakan file execute (.sh) untuk menjalankannya.

Pada artikel ini, saya akan membahas tentang aplikasi Quartz Scheduler. Aplikasi ini merupakan aplikasi open-source yang menjalankan layanan penjadwalan (scheduling service)  yang terintegrasi pada aplikasi kecil yang berjalan sendiri (stand-alone) atau aplikasi besar pada sistem ­e-commerce. Selain itu, aplikasi dikategorikan aplikasi workflow atau aplikasi yang menjalankan job-job secara reguler.


Pada artikel ini, saya menggunakan program Quartz dengan versi 2.1.6 (Dapat download disini) dan dijalankan pada ECLIPSE IDE. Contoh kode quartz untuk program scheduler sederhana adalah sebagai berikut:

package org.ekow.scheduler;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;

public class SimpleScheduler {

       public static void main(String[] args) {
              try {
            // Buat instan Scheduler dari kelas StdSchedulerFactory.
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

            // Jalankan scheduler.
            scheduler.start();

            // Matikan lagi scheduler.
            scheduler.shutdown();

        } catch (SchedulerException se) {
            se.printStackTrace();
        }
       }
}


Contoh kode quartz untuk membuat kelas job (dengan nama HelloJob) adalah sebagai berikut:

package org.ekow.scheduler.job;

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * Job untuk menampilkan kata2 hello world.
 *
 * @author ekowahyudi
 *
 */
public class HelloJob implements Job {

       @Override
       public void execute(JobExecutionContext context)
                     throws JobExecutionException {
              System.out.println("Job: " + new Date());
              System.out.println("\tHello World");
       }

}


Setelah kelas Job dibuat, selanjutnya menambahkan kelas tersebut ke scheduler dan mendefinisikan aturan untuk dijalankan (trigger). Contoh kodenya adalah sebagai berikut:

package org.ekow.scheduler;

import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;

import org.ekow.scheduler.job.HelloJob;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

public class SchedulerWithJob {

       public static void main(String[] args) {
              try {
                     Scheduler scheduler = StdSchedulerFactory
                                  .getDefaultScheduler();
                     scheduler.start();

                     /**
                      * Definisikan job.
                      */
                     JobDetail jobDetail = newJob(HelloJob.class)
                                  .withIdentity("Hello","Test").build();

                     /**
                      * Definisikan trigger dengan interval tiap 10 detik.
                      */
                     Trigger trigger = newTrigger()
                                  .withIdentity("HelloTrigger", "Test")
                                  .startNow()
                                  .withSchedule(simpleSchedule()
                                                .withIntervalInSeconds(10)
                                                .repeatForever()).build();

                     /**
                      * Daftarkan job ke scheduler.
                      */
                     scheduler.scheduleJob(jobDetail, trigger);

              } catch (SchedulerException se) {
                     se.printStackTrace();
              }
       }
}


Hasilnya di console adalah sebagai berikut:

log4j:WARN No appenders could be found for logger (org.quartz.impl.StdSchedulerFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Job: Fri Dec 14 21:27:50 ICT 2012
       Hello World
Job: Fri Dec 14 21:28:00 ICT 2012
       Hello World
Job: Fri Dec 14 21:28:10 ICT 2012
       Hello World


Hal yang harus diperhatikan dalam menjalankan quartz di java adalah library jar yang dibutuhkan oleh quartz. Library yang dibutuhkan untuk menjalankan program di atas adalah sebagai berikut:
  • ·         log4j-1.2.16.jar
  • ·         quartz-2.1.6.jar
  • ·         quartz-commonj-2.1.6.jar
  • ·         slf4j-api-1.6.1.jar
  • ·         slf4j-log4j12-1.6.1.jar


Selamat mencoba ^_^.. Kalau ada pertanyaan dapat mengisi form komentar...

Komentar

  1. Mas mau tanya klo membuat 2 jobs bagaimana?
    misalnya jobs schedule pertama dilakukan jam 7.00 untuk baca data pertama, kemudian jobs schedule kedua dilakukan jam 9.00 untuk bersihkan data pertama. Mohon Pencerahannya mas saya masih belajar.

    BalasHapus

Posting Komentar

Postingan populer dari blog ini

Pengenalan Design Pattern di Java

Java merupakan pemrograman yang berorientasi objek dengan interface, abstract, dan class sebagai bentuk dasar dari kode. Seorang programmer java yang ingin mencapai level expert apakah cukup dengan mengetahui prinsip OOP ( Object Oriented Programming ) ? Jawabannya tidak. Karena ilmu yang harus dipahami selanjutnya adalah Design Pattern dalam membuat kode Java. Design Pattern adalah solusi umum (konteks) terhadap masalah yang sering muncul dalam aplikasi software . Berdasarkan pengertian tersebut, design pattern terdiri dari tiga elemen dasar, yaitu: Konteks : situasi dimana pattern diterapkan (dan biasanya hal ini berulang) Masalah : tujuan atau batasan yang akan dicapai oleh konteks Solusi : desain umum dari masalah yang akan diselesaikan dan ditentukan batasannya

Kode Contrast Stretching di Matlab

Buatlah filter Untuk memperbaiki citra bean pada gambar (a) dengan menggunakan fungsi T sebagaimana terlihat pada gambar (b). Dimana m1, m2 dan m3 adalah gradient. Temukan nilai m1,m2 dan m3 yang paling optimal sehingga menghasilkan gambar (c).

Pengenalan GridSQL

Overview Gridsql adalah sistem database paralel (terbagi beberapa cluster ) yang didesain untuk solusi data warehouse dan berbasis database PostgreSQL . Gridsql digunakan untuk memaksimalkan penggunaan database dengan data yang sangat besar, sehingga menghasilkan query yang cepat untuk mendapatkan informasi yang diinginkan. Aplikasi gridsql dijalankan di server induk yang terhubung dengan beberapa server ( agent ). Cara gridsql menghasilkan query dengan cepat adalah menempatkan data ke beberapa server agent yang diatur oleh satu server induk ( coordinator) . Saat menjalankan query di server induk, server induk akan menjalankan query yang sama secara paralel di server bawahannya. Sehingga hasil query -nya lebih cepat walau dengan data yang sangat besar. Gridsql dapat dijalankan di beberapa Operating System , seperti : a.        Windows b.       Linux c.        Solaris (seperti linux dalam instalasinya) Gridsql memang sang