+ Start a Discussion
Abhi MalikAbhi Malik 

Schedule an Class at a interval of 5 minutes

I am trying to Schedule an class at the interval of 5 minutes but am not getting any idea how to perform it, i have seen some examples but they are not working properly please help if any body can.
Best Answer chosen by Abhi Malik
Vasani ParthVasani Parth
Say, you want the class to run every 1 hour, or every 30 mins, then you cannot do it using declarative way. To do this, we can use system.schedule method and call the scheduler class. System.schedule takes 3 parameters as below :
system.schedule('jobname',timeperiod,scheduler class name)
jobname: you can give any name to your job
timeperiod: specify the time frequency with which the job should run
scheduler class name: scheduler class that calls your batch apex class.

 timeperiod should be specified in below format:
Seconds Minutes Hours Day_of_month Month Day_of_week optional_year

For example, to run every 5 mins the expression would be : 0 5 * * * ?

here '*' means every time against the specified parameter, every hour, every day of month, every day of week and '?' means no specific value. Thus, this expression means every 5 minutes. So, the system.schedule('testname',0 35 * * * ?,schedulerclass()); would call the schedulerclass every 30 minutes when the statement executes.You can visit salesforce documentation to know more on system.schedule parameters.

Lets write a simple batch apex class, its scheduler class and then, execute system.schedule method to run that batch apex every 5 minutes.

Batch Apex Class:
global class BatchApexDemo implements database.batchable<sobject>{
Public string soqlquery;
 Public void setQry(string soqlquery){
    this.soqlquery = 'Select name,status from account limit 1';
 }
 global database.querylocator start(database.batchableContext bc){
  return database.getquerylocator(soqlquery);
 }
 global void execute(database.batchablecontext bd, list<sobject> sc){
   System.debug('**In Execute Method**');
 }
 Public void finish(database.batchableContext bc){
  
 }
}
Scheduler class along with method that will Can scheduler class every 5 minutes:
 
global with sharing class ScheduleBatchApexDemo implements Schedulable {
global void execute(SchedulableContext sc) {
  ID BatchId = Database.executeBatch(new BatchApexDemo(), 200);
}
 
Public static void SchedulerMethod() {
  string timeinterval = '0 5 * * * ?';
  System.schedule('BatchApexDemo-Every15mins',timeinterval, new ScheduleBatchApexDemo());
  }
}
Now, we have to just execute the "SchedulerMethod" once, this will keep on calling the batch apex every 5 minutes. We can use developer console to execute this method. Just execute below statement to call the method: ScheduleBatchApexDemo.SchedulerMethod(); You can monitor the batch apex being called every 5 minutes from: set up--> monitoring jobs

Please mark this as the best answer if this helps
 

All Answers

Muba SFDCMuba SFDC
try this
System.schedule('Jobname', '0 5 * * * ?', new scheduleclass());
Vasani ParthVasani Parth
Abhi - Welcome to this vibrant community

This problem can easily be solved using apex:
System.schedule('Scheduled Job 1', '0 5 * * * ?', new ScheduledClass());
Please mark this as the best answer if this helps
Abhi MalikAbhi Malik
Thanks am new to scheduler apex can you please send me complete code , please send if you can.
Muba SFDCMuba SFDC
You can simply paste this above code in developer console anonymous window by replacing job name with your exact job name and schedule class with your schedule class and click execute.

after execute you can check your scheduler in Scheduled Jobs under setup.
Vasani ParthVasani Parth
Say, you want the class to run every 1 hour, or every 30 mins, then you cannot do it using declarative way. To do this, we can use system.schedule method and call the scheduler class. System.schedule takes 3 parameters as below :
system.schedule('jobname',timeperiod,scheduler class name)
jobname: you can give any name to your job
timeperiod: specify the time frequency with which the job should run
scheduler class name: scheduler class that calls your batch apex class.

 timeperiod should be specified in below format:
Seconds Minutes Hours Day_of_month Month Day_of_week optional_year

For example, to run every 5 mins the expression would be : 0 5 * * * ?

here '*' means every time against the specified parameter, every hour, every day of month, every day of week and '?' means no specific value. Thus, this expression means every 5 minutes. So, the system.schedule('testname',0 35 * * * ?,schedulerclass()); would call the schedulerclass every 30 minutes when the statement executes.You can visit salesforce documentation to know more on system.schedule parameters.

Lets write a simple batch apex class, its scheduler class and then, execute system.schedule method to run that batch apex every 5 minutes.

Batch Apex Class:
global class BatchApexDemo implements database.batchable<sobject>{
Public string soqlquery;
 Public void setQry(string soqlquery){
    this.soqlquery = 'Select name,status from account limit 1';
 }
 global database.querylocator start(database.batchableContext bc){
  return database.getquerylocator(soqlquery);
 }
 global void execute(database.batchablecontext bd, list<sobject> sc){
   System.debug('**In Execute Method**');
 }
 Public void finish(database.batchableContext bc){
  
 }
}
Scheduler class along with method that will Can scheduler class every 5 minutes:
 
global with sharing class ScheduleBatchApexDemo implements Schedulable {
global void execute(SchedulableContext sc) {
  ID BatchId = Database.executeBatch(new BatchApexDemo(), 200);
}
 
Public static void SchedulerMethod() {
  string timeinterval = '0 5 * * * ?';
  System.schedule('BatchApexDemo-Every15mins',timeinterval, new ScheduleBatchApexDemo());
  }
}
Now, we have to just execute the "SchedulerMethod" once, this will keep on calling the batch apex every 5 minutes. We can use developer console to execute this method. Just execute below statement to call the method: ScheduleBatchApexDemo.SchedulerMethod(); You can monitor the batch apex being called every 5 minutes from: set up--> monitoring jobs

Please mark this as the best answer if this helps
 
This was selected as the best answer
Abhi MalikAbhi Malik
I am getting this error when am saving this ScheduleBatchApexDemo class and error is ScheduleBatchApexDemo: Invalid interface: Schedulable
Nitish TalekarNitish Talekar
Hi Abhi,

To run Schedule a Class In Every 5 Mins in Salesforce check this : http://howtodoitinsalesforce.blogspot.in/2016/12/run-schedule-class-in-every-5-mins-in.html

Thanks,
Nitish
numberforty1numberforty1
Vasani's answers above could not be more wrong! 

'0 5 * * * ?' means the 5th minute of every hour, NOT every five minutes!