Maven projesinde aşağıdaki gibi bağımlılık eklenmeli:
org.quartz-scheduler
quartz
2.2.2
org.quartz-scheduler
quartz-jobs
2.2.2
Aşağıdaki gibi quartz.properties dosyasını classpath'e eklenmesi gerekir (örneğin src klasörünün root'na eklenebilir)
org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.scheduler.instanceName = MyScheduler sistem bir isim vermek için kullanılır. org.quartz.threadPool.threadCount değeri anda çalışacak thread sayısını sınırlamaktadır. org.quartz.jobStore.class ise job'ların RAM'de saklanacağı ve yönetileceği anlamına gelmektedir.
Aşağıdaki gibi ekrana Hello World yazan bir job yapılabilir:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloWorldJob implements Job{
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("Hello World");
}
}
Bu job'ın çalışması için Scheduler sistemini başlatan, bu job'ı çalışması için bir sınıf aşağıdaki gibi yapılabilir:
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import org.quartz.JobDetail;
public class SchedulerManager {
public void init() throws SchedulerException{
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
JobDetail jobDetail = newJob(HelloWorldJob.class)
.withIdentity("job1", "group1")
.build();
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(10)
.repeatForever())
.build();
scheduler.scheduleJob(jobDetail, trigger);
}
public static void main(String[] args) throws SchedulerException {
SchedulerManager manager=new SchedulerManager();
manager.init();
}
}
scheduler.start() ile scheduler sistemi başlatılır. JobDetail sınıfı ile HelloWorld job'ı tanımlanır. Bu job'ın hangi aralıklarla çalışacağını belirlemek için bir Trigger yaratılır. Örnekte yaratılan trigger 10 sn'de bir HelloWorldJob'ın çalışmasını sağlayacak şekildedir. scheduler.scheduleJob(jobDetail, trigger) ile bu işlem yapılmıştır.
main içinde init methodu çağrılacak sistemin çalışması sağlanmıştır. Program çalıştığında ekrana 10 sn de bir Hello World yazılacaktır
Bu job'ın bir web servis içinde , uygulama sunucusu açılırken (jboss , tomcat vb..) yüklenmesi isteniyor ise aşağıdaki gibi web listener ile yapılabilir :
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.annotation.WebListener;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.ee.servlet.QuartzInitializerListener;
import org.quartz.impl.StdSchedulerFactory;
@WebListener
public class QuartzListener extends QuartzInitializerListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
try {
super.contextInitialized(sce);
ServletContext ctx = sce.getServletContext();
StdSchedulerFactory schedulerFactory = (StdSchedulerFactory) ctx
.getAttribute(QUARTZ_FACTORY_KEY);
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
JobDetail jobDetail = newJob(HelloWorldJob.class)
.withIdentity("job1", "group1")
.build();
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(cronSchedule("0/10 * * * * ?"))
.build();
scheduler.scheduleJob(jobDetail, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}