10 Aralık 2017 Pazar

Quartz Scheduler



Uygulamalardaki en kritik konulardan biri de belli bir saatte çalışması planlanmış işlerdir. Bu işlemler arka planda, kullanıcı ile bir etkileşimi olmadan çalışıyor.
Quartz açık kaynaklı bir uygulamadır ve her türlü Java uygulamasının bir parçası olarak çalışabiliyor. Quartz, Trigger diye adlandırılan bir tetikleme mekanizmasına sahiptir. 


Quartz kullanım olarak 2 aşamadan oluşuyor. Birincisi çalışacak olan job belirleme, ikincisi hangi zaman aralıklarında çalışacağı bilgisini düzenlemek. Quartz 3 ana bileşenden oluşuyor. Bunlar "job, trigger, schedular"dır. Job yapılacak olan iştir. Trigger job'ın ne zaman, ne şekilde tetikleneceği emrini veren yapıdır. Job ve Trigger ikisi birlikte schedular'a register olurlar. Kısaca çalışma şekli olarak; job schedular üzerinden trigger tarafından çalıştırılıyor. 

 Projeye Quartz'ı eklemek
Tam dağıtımı(with examples, source, dependencies, doc, etc.) indirebilirsiniz veya Maven kullanıcısıysanız bağımlılıkları ekleyebilirsiniz.
  <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>2.2.1</version>
  </dependency>
 Bir Schedular başlatın
 Schedular'lar Factory'ler tarafından oluşturulur ve onların .start() methodu çağırılıncaya kadar hiçbir işlem başlatılmayacaktır.
  Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
  scheduler.start();
Quartz Fluent Scheduling API ile kodlama  
API bileşenlerini static olarak import etmeliyiz.
  import org.quartz.Scheduler;
  import org.quartz.SchedulerException;
  import org.quartz.impl.StdSchedulerFactory;
  import static org.quartz.JobBuilder.*;
  import static org.quartz.TriggerBuilder.*;
  import static org.quartz.SimpleScheduleBuilder.*; 
Bunu yaptıktan sonra .execute() methoduna sahip olan Job'ı implement edebilirsiniz.
  public class MyJob implements org.quartz.Job {

      public MyJob() {
      }

      public void execute(JobExecutionContext context)  
        throws JobExecutionException {
          System.err.println("Hello World!  MyJob is executing.");
      }
  
Sonra bu jobları ne zaman çalıştırılacağını tanımlayan triggerlar ile zamanlayın.
 //İşi tanımlayın ve MyJob sınıfına bağlayın
   JobDetail job = newJob(MyJob.class)
      .withIdentity("job1", "group1")
      .build();
//Şimdi Job'ı tetikleyin ve her 40 saniyede bir tekrarlansın. 
  Trigger trigger = newTrigger()
      .withIdentity("trigger1", "group1")
      .startNow()
      .withSchedule(simpleSchedule()
              .withIntervalInSeconds(40)
              .repeatForever())
      .build();
//Quartz'a triggerı kullanarak işi zamanlamasını söyle
   scheduler.scheduleJob(job, trigger); 
Daha fazlasını öğrenmek isterseniz ayrıca Quartz'ın kendi web sitesinde çok iyi bir tutorial da hazır bulunuyor. Gelecek yazıda görüşmek üzere o/