İpucu

Quarzt API 2.2.2 Kurulumu ve Basit Bir Job Çalıştırılması

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();
		}

	}

}
zafer.teker , 05.03.2016

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir

Misafir Yorumları




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir