Quartz etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Quartz etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

11 Aralık 2022 Pazar

Quartz Job Arayüzü - Çalıştırılacak İşi Temsil Eder

Giriş
Şu satırı dahil ederiz.
import org.quartz.Job;
Açıklaması şöyle
an interface to be implemented by components that you wish to have executed by the scheduler
execute metodu
Örnek
Şöyle yaparız
@Slf4j
@Component
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class SampleJob implements Job {

  @Autowired
  private TestRepository testRepository;

  @Override
  public void execute(JobExecutionContext context)
    throws JobExecutionException {
    ...
  }
}
Örnek
Şu satırı dahil ederiz.
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
Şöyle yaparız.
public class SomeJob implements Job {

  @Override
  public void execute(final JobExecutionContext context) throws JobExecutionException {
    //do stuff
  }
}

8 Mart 2021 Pazartesi

Quartz JobExecutionContext Arayüzü

Giriş
Şu satırı dahil ederiz
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
getFireTime metodu
Şöyle yaparız.
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
  System.out.println(context.getFireTime());
}
getJobDetail metodu
JobDetail nesnesi Job'ı yani çalışacak işi ve JobKey nesnesini içerir.

Örnek
Şöyle yaparız
public class SampleJobOne implements Job {

  @Override
  public void execute(JobExecutionContext context) {
    logger.info("JobOne ** {} ** fired @ {}",context.getJobDetail().getKey().getName(),
context.getFireTime());
    ...
  }
}

1 Mart 2021 Pazartesi

Quartz TriggerBuilder Sınıfı

Giriş
Şu satırı dahil ederiz.
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
Trigger yaratır. Trigger işin ne zaman koşacağını bilir. Açıklaması şöyle
Trigger contains scheduling condition(ex. number of iterations, start time) to execute the job, and the scheduler performs the job based on this information.

The Relationship Between Trigger and Job
Trigger (1) : Job(1)
One Trigger must be designated as one Job
Trigger (N) : Job(1)
One Job can be run multiple times at different times
Trigger (1) : Job(N) (X)
One Trigger cannot have more then One Job

withSchedule metodu
Örnek - single shot SimpleSchedule
Şöyle yaparız
Trigger buildJobTrigger(JobDetail jobDetail, ZonedDateTime startAt) {
  return TriggerBuilder.newTrigger().forJob(jobDetail)
    .withIdentity(jobDetail.getKey().getName(), "email-triggers")
    .withDescription("Send Email Trigger")
    .startAt(Date.from(startAt.toInstant()))
    .withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withMisfireHandlingInstructionFireNow())
    .build();
}
Örnek - periodic SimpleSchedule
Şöyle yaparız.
Trigger trigger = TriggerBuilder
  .newTrigger()
  .withIdentity("myTriggerName", "myGroup")
  .withSchedule(
    SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever())  )
  .build();
Örnek - CronSchedule
Şöyle yaparız.
Trigger trigger = TriggerBuilder.newTrigger()
  .withIdentity("cronTrigger", "group1")
  .withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?"))
  .build();
Örnek - CronSchedule
Şöyle yaparız
import org.quartz.CronScheduleBuilder;
import org.quartz.ScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;

String cronExpression = ...;

ScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);
Trigger trigger = TriggerBuilder.newTrigger()
  .withIdentity("databasetrigger", "databasegroup")
  .startNow()
  .withSchedule(scheduleBuilder)
  .build();

Quartz JobBuilder Sınıfı

Giriş
Şu satırı dahil ederiz.
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
Kullanım
JobBuilder bir JobDetail nesnesi döndürür. JobDetail için açıklama şöyle
It is an object that contains information for executing the Job. Includes Job name, group, JobDataMap attribute, etc
Aşağıdaki metodların hepsi çağrılır ve en sonunda build() çağrısı ile bir JobDetail döndürülür
newJob() metodu ile çalıştırılacak işin Class bilgisi belirtilir.
usingJobData() metodu ile çalıştırılacak işe geçilecek parametreler belirtilir.
withIdentity() işe çalıştırılacak işe bir isim verilir.
withDescription() işe çalıştırılacak işe bir açıklama verilir.
Örnek
Şöyle yaparız
public <T extends Job> JobDetail buildJobDetail(Class<? extends Job> job, 
                                                SampleJobRequest request) {

  JobDataMap jobDataMap = new JobDataMap(); // job Data Map
  jobDataMap.put("executeCount", 1); // put Data

  return JobBuilder.newJob(job)
    .withIdentity(request.getJobName())
    .withDescription(request.getJobDescription())
    .usingJobData(jobDataMap)
    .build();
}
usingJobData metodu  - JobDataMap 
JobDataMap  için açıklama şöyle
The JobDataMap is an object that stores information that is available when the Job instance runs
Örnek
Şöyle yaparız
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;

JobDetail buildJobDetail(ScheduleEmailRequest scheduleEmailRequest) { JobDataMap jobDataMap = new JobDataMap(); jobDataMap.put("email", scheduleEmailRequest.getEmail()); jobDataMap.put("subject", scheduleEmailRequest.getSubject()); jobDataMap.put("body", scheduleEmailRequest.getBody()); return JobBuilder.newJob(EmailJob.class) .withIdentity(UUID.randomUUID().toString(), "email-jobs") .withDescription("Send Email Job") .usingJobData(jobDataMap) .storeDurably() .build(); }
withIdentity metodu - JobKey
Örnek
Şöyle yaparız
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class DatabaseBackup implements Job {

  @Override
  public void execute(JobExecutionContext context) throws JobExecutionException {
    ...
  }
}

Scheduler scheduler = ...;
String cronExpression = ...;
JobKey jobKey = new JobKey("databasejob", "databasegroup");
JobDetail job = JobBuilder.newJob(DatabaseBackup.class)
  .withIdentity(jobKey)
  .build();

ScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression);
Trigger trigger = new Trigger()
  .withIdentity("databasetrigger", "databasegroup")
  .startNow()
  .withSchedule(scheduleBuilder)
  .build();

try {
  scheduler.scheduleJob(job, trigger);
  System.out.println(trigger.getKey().getName() + " " + trigger.getNextFireTime());
} catch (SchedulerException ex) {
  ...
}
withIdentity metodu - String + String
Örnek

Şöyle yaparız
JobDetail job = JobBuilder.newJob(MyJob.class)
  .withIdentity("myJobName", "myGroup").build();