View
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' 카테고리의 다른 글
Batch Apex (1) | 2022.03.08 |
---|