We can schedule a batch apex using declarative way/OOTB, for this we need to write the schedule class that calls the batch apex class. Using declarative way we can schedule the class either weekly or monthly basis.
In weekly, we can have it run every day or any selected day of week. For a particular day we can specify a preferred time at which the class run. So, using declarative way we can have a highest frequency of 1 time per day not more than that. That is it does not support to run the class more number of times per day. 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 30 mins the expression would be : 0 30 * * * ?
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 30 minutes. So, the system.schedule('testname',0 30 * * * ?,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 30 minutes.
Batch Apex Class:
Scheduler class along with method that will Can scheduler class every 30 minutes:
Now, we have to just execute the "SchedulerMethod" once, this will keep on calling the batch apex every 30 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 30 minutes from: set up--> monitoring jobs