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 runscheduler 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_yearFor 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 jobsPlease mark this as the best answer if this helpsVasani's answers above could not be more wrong! '0 5 * * * ?' means the 5th minute of every hour, NOT every five minutes! Abhi - Welcome to this vibrant community This problem can easily be solved using apex:
Please mark this as the best answer if this helpsSystem.schedule('Scheduled Job 1', '0 5 * * * ?', new ScheduledClass());
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.htmlThanks,Nitish 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. I am getting this error when am saving this ScheduleBatchApexDemo class and error is ScheduleBatchApexDemo: Invalid interface: Schedulable Thanks am new to scheduler apex can you please send me complete code , please send if you can.
8 answers