[Salesforce]スケジュールバッチのトランザクション処理順

スケジュールバッチのトランザクション処理順について共有します。

例えば、10件のデータを1トランザクション毎2件ずつ処理するようになります。

その処理は直列で実行されます。

以下の例で確認できます。

global class SampleBatch implements Database.Batchable<sObject> {
  
  // The batch job starts
  global Database.Querylocator start(Database.BatchableContext bc){
    String query = 'SELECT Id, Name FROM Account LIMIT 100';
    return Database.getQuerylocator(query);
  } 
  
  // The batch job executes and operates on one batch of records
  global void execute(Database.BatchableContext bc, List<sObject> scope){
    System.debug(LoggingLevel.INFO, '>>> execute start at ' + DateTime.now().format('yyyy/MM/dd hh:mm:ss'));
    Long startTime = DateTime.now().getTime();
    Long finishTime = DateTime.now().getTime();
    
    while ((finishTime - startTime) <= 2000) {
      //sleep 2s
      finishTime = DateTime.now().getTime();
    }
    
    System.debug(LoggingLevel.INFO, '>>> execute end at ' + DateTime.now().format('yyyy/MM/dd hh:mm:ss'));
  }
  
  // The batch job finishes
  global void finish(Database.BatchableContext bc){
    AsyncApexJob job = [SELECT Id, Status FROM AsyncApexJob WHERE Id = :bc.getJobId()]; 
    System.debug(LoggingLevel.INFO, '>>>> finish ' + job.Status);
  }
}

バッチ実行

Integer BATCH_SIZE = 2;
SampleBatch sb = new SampleBatch();
Database.executeBatch(sb, BATCH_SIZE);

投稿者: kinkun

保有資格 Salesforce Certified Platform App Builder T Salesforce Certified Platform Developer I Salesforce Certified Platform Developer II Salesforce Certified Administrator

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です