Force.com으로 프로그램을 작성하다보면 Batch 프로그램을 작성할 필요가 있습니다.
그래서
Force.com에서 사용할 수 있는 표준적인 Batch Program을 작성해 봅시다.
물론 여러 방법으로 Batch 프로그램을 작성할 수 있지만 여기서 제시하는 것은 저의 표준 제안 입니다.
//--- Apex Batch의 클래스 명은 BatStandard 입니다.
//--- 제약 사항 : 동시에 최대 5개의 Bat Job만 처리가 가능 합니다.
//--- 따라서 6번째 Bat Job이 실행이 되면 첫번째 Bat Job이 비정상 종료 합니다.
global class BatStandard implements Database.Batchable<sObject>, Database.Stateful {
//--- Stateful을 implement 하였으므로 execute Method가 실행될 때마다
//--- manage 변수가 초기화 되지 않고 변경된 값이 유지 됩니다.
global final Account manage = null;
//--- BatStandard 클래스의 생성자 입니다.
global BatStandard(Account manage) {
this.manage = manage;
}
//--- Batch 처리를 하기전에 호출되는 Method로 Batch 처리할 레코드의 정보를 가진 QueryLocator를 반환 합니다.
//--- 제약사항 : 최대 5000만 레코드까지 처리가 가능 합니다.
global Database.QueryLocator start(Database.BatchableContext ctx) {
return Database.getQueryLocator([SELECT Id
FROM Session__c]);
}
//--- 실제 Batch 처리가 이루어지는 Method로 이 execute Method 단위로 Transaction 관리가 됩니다.
//--- scope : start Method에서 반환한 QueryLocator를 사용하여 읽은 레코드로 default로 200개의 레코드가 전달 됩니다.
//--- 1000개의 레코드가 Batch로 처리될 경우, execute Method가 5번 호출 됩니다.
//--- 제약 사항 : execute Method 단위로 Transaction 관리가 되므로 중간에 오류가 발생할 경우
//--- 오류가 발생한 execute Method 이전에 실행된 execute Method에서 처리된
//--- 데이터로는 Rollback 처리가 되지 않습니다.
//--- 제약 사항 : 각각의 execute Method별로 Salesforce의 제약 사항이 적용 됩니다.
//--- 다시말하면,
Salesforce의 제약 사항은 각 execute Method별로 초기화되어 적용 됩니다.
//--- 제약 사항 : 최대 5개의 cursor만 동시에 사용할 수 있습니다.
global void execute(Database.BatchableContext ctx, List<Session__c> scope) {
delete scope;
}
//--- Batch 처리를 완료한 후에 호출되는 Method 입니다.
global void finish(Database.BatchableContext ctx) {
AsyncApexJob job = null;
AsyncApexJob job = [SELECT Id, Status, NumberOfErrors, JobItemsProcessed, TotalJobItems, CreatedBy.Email
FROM AsyncApexJob
WHERE Id = :ctx.getJobId()];
}
}
위의 표준 Apex Batch 프로그램을 참조로 Batch 프로그램을 작성 하였다면 이제 실행을 시켜 봅시다.
ID batchId = null;
BatStandard batch = null;
batch = new BatStandard();
batchId = Database.executeBatch(batch);
//--- execute Method에서 한번에 처리하는 레코드의 갯수를
//--- 500개로 늘리려면 다음과 같이 Batch 프로그램을 호출 하세요.
batchId = Database.executeBatch(batch, 500);
실행되고 있는 Batch 프로그램을 모니터링하거나 관리하려면
"설정 -> 관리 설정 -> 모니터링 -> Apex 작업" 메뉴를 선택해 보세요.
Posted by 산사랑