View

Apex Scheduler

jaeeH 2022. 3. 8. 15:27

 

 

 

Apex Scheduler

 

 

특정한 시간에 Apex class 실행하기

1. Schedulable 인터페이스 implement 하기

2. Schedule Apex page 또는System.schedule  메소드 사용

 

Note

  • Scheduled Apex job은 한 번에 100개만 가질 수 있음
  • Trigger를 사용하여 schedule을 계획할 때에는 scheduled class를 limit보다 더 많이 추가하지 않도록 유의하기
  • Apex class에 대해 active scheduled job이 하나 이상 있는 경우 Salesforce user interface를 통해 이 클래스 또는 이 클래스를 참조하는 클래스를 업데이트할 수 없음.

 

 

Schedulable Interface 상속받기

Schedulable 인터페이스는 execute 메소드를 반드시 포함해야 함

상속받은 메소드는 반드시 global 또는 public 으로 선언되어야 함

global class scheduledMerge implements Schedulable {
    global void execute(SchedulableContext SC) {
    	mergeNumbers M = new mergeNumbers();
    }
}

 

Schedulable 인터페이스와 함께 batch Apex class 사용하기

global class scheduledBatchable implements Schedulable {
    global void execute(SchedulableContext sc) {
    	batchable b = new batchable();
        database.executebatch(b);
    }
}

 

Schedulable 인터페이스 상속 없이 batch job 예약하기

System.scheduleBatch

 

SchedulableContext object를 사용하여 scheduled job 추적하기

SchedulableContext getTriggerID 메소드 : scheduled job과 연결된 CronTrigger object의 ID를 String으로 반환                      CronTrigger를 쿼리 하여 scheduled job의 진행률 추적 O

 

Scheduled job 실행 중지하기

getTriggerID 메소드에 의해 반환된 ID와 함께 System.abortJob 메소드 사용하기.

 

 

 

Query를 사용하여 Scheduled Job 진행 추적하기

CronTrigger에서 SOQL 쿼리를 실행시켜 정보를 얻을 수 있음

CronTrigger ct = 
        [SELECT TimewTriggered, NextFireTime
         FROM CronTrigger WHERE Id = :jobID];

 

System.schedule 메소드는 job ID를 반환.

Schedulable class의 execute 메소드 안에서 쿼리 하고 싶다면, SchedulableContext 인수 변수에서 getTriggerID 메소드를 호출하여 현재 job에 대한 ID를 얻을 수 있음.

CronTrigger ct = 
        [SELECT TimesTriggered, NextFireTime
         FROM CronTrigger WHERE Id = :sc.getTriggerId()];	//sc = 변수명

 

CronTrigger 레코드와 관련된 CronJobDetail 레코드에서 job의 이름과 type을 얻을 수 있음

CronTrigger job =
        [SELECT Id, CronJobDetail.Id, CronJobDetail.Name, CronJobDetail.JobType
         FROM CronTrigger ORDER BY CreateDate DESC LIMIT 1];

 

 

 

System.Schedule 메소드 사용하기

Schedulable 인터페이스를 사용하여 클래스 구현 후 System.Schedule 메소드 사용하기.유저 permission에 관계없이 모든 클래스가 실행됨.

 

System.schedule 메소드는 3개의 인수를 가진다 :   1) job의 이름  2) job이 실행되도록 예약된 시간&날짜 표현식  3) 클래스 이름

Seconds Minutes Hours Day_of_month Day_of_week_ Optional_year

Expression에서 사용되는 value

Name Values Special Characters
Seconds 0-59 None
Minutes 0-59 None
Hours 0-23  , - * / 
Day_of_month 0-31  , - * ? / L W 
Month 1-12 or JAN - DEC  , - * / 
Day_of_week 1-7 or SUN - SAT  , - * ? / L # 
optional_year null or 1970-2099  , - * / 

 

Special Characters

Special
Character
Description     Example
 ,  값을 구분    한 달 이상을 지정하려면 ☞ JAN, MAR, APR
 -  범위를 지정   한 달 이상을 지정하려면  JAN - MAR
 *  모든 값 지정   월이 * 로 지정된 경우 매월 예약됨
 ?  특정 값 지정 X
(Day_of_month & Day_of_week에만 사용 O)
하나의 값을 지정하고 다른 값을 지정하지 않을 때 사용됨
 
 /  증가분 지정
간격이_시작될_시기/간격_양
  Day_of_month에 1/5를 지정하면 매월 첫째 날부터
  시작하여 매월 5일마다 실행됨
 L  범위의 끝(마지막)을 지정
(Day_of_month & Day_of_week에만 사용 O)
  Day_of_month에 사용 1월31일, 2월 29일과 같은 월의
  마지막 날을 의미

  Day_of_week에 사용 7 또는 SAT을 의미
  Day_of_week에 2L을 지정 해당 월의 마지막 월요일
 W  지정된 요일의 가장 가까운 평일을 지정
(Day_of_month에만 사용 O)
  20W 지정, 20일이 토요일인 경우 ☞ 19일에 실행
  1W 지정, 1일이 토요일인 경우 ☞ 다음 주 월요일
  ★ L과W를 같이 사용 ☞ 해당 월의 마지막 평일
 #  월의 n번째 날
weekday#day_of_month
(Day_of_week에만 사용 O)
  2#1을 지정 ☞ 매월 첫번째 월요일

 

 

 

 

 

 

 

 

※출처 : Apex Developer Guide

 

Apex Scheduler | Apex Developer Guide | Salesforce Developers

To invoke Apex classes to run at specific times, first implement the Schedulable interface for the class, then specify the schedule using either the Schedule Apex page in the Salesforce user interface, or the System.schedule method. Salesforce schedules th

developer.salesforce.com

 

 

 

 

 

 

 

 

 

'Apex' 카테고리의 다른 글

Batch Apex  (1) 2022.03.08
Share Link
reply
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31