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...
Mas mau tanya klo membuat 2 jobs bagaimana?
BalasHapusmisalnya 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.