The scheduling support classes act as a wrapper for the java Quartz Scheduler
They are as follows:
org.springframework.scheduling.quartz.QuartzJobBean
org.springframework.scheduling.quartz.JobDetailBean
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
org.springframework.scheduling.quartz.SchedulerFactoryBean
Some of the thread pooling support classes are as follows:
org.springframework.scheduling.quartz.SimpleThreadPoolTaskExecutor
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
Please see below a simple example using Spring Framework's Quartz scheduling and threadpooling features:
UML Diagram of example using Spring's scheduling and thread pooling features
click on diagram to view larger picture
Please see below example Code:
MonitorJob.java
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class MonitorJob extends QuartzJobBean {
private int timeout;
private static final String APPLICATION_CONTEXT_KEY = "applicationContext";
public void setTimeout(int timeout){
this.timeout = timeout;
}
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
processJobs(context);
}
private ApplicationContext getApplicationContext(JobExecutionContext context )
throws Exception {
ApplicationContext appCtx = null;
appCtx = (ApplicationContext)context.getScheduler().getContext().get(APPLICATION_CONTEXT_KEY);
if (appCtx == null) {
throw new JobExecutionException(
"No application context available in scheduler context for key \"" + APPLICATION_CONTEXT_KEY + "\"");
}
return appCtx;
}
private void processJobs(JobExecutionContext context) {
MonitorProcessDelegate procDelegate = null;
try {
ApplicationContext ctx = getApplicationContext(context);
procDelegate = (MonitorProcessDelegate)ctx.getBean("MonitorProcessDelegate");
}catch (Exception e) { e.printStackTrace();}
System.out.println("Running job monitor");
procDelegate.ListBusinessExceptionCases();
procDelegate.ListActiveProcesses();
}
}
MonitorProcessDelegate.java
import org.springframework.core.task.TaskExecutor;
public class MonitorProcessDelegate {
private class ActiveProcesses implements Runnable {
// code for identifying and listing active processes
public void run() {
.....
}
}
private class BusinessExceptionCasesBacklog implements Runnable {
// code for identifying and listing business exception cases
public void run() {
.....
}
}
private TaskExecutor taskExecutor;
public MonitorProcessDelegate;(TaskExecutor taskExecutor) {
this.taskExecutor = taskExecutor;
}
public void ListActiveProcesses() {
taskExecutor.execute(new ActiveProcesses());
}
public void ListBusinessExceptionCases() {
taskExecutor.execute(new BusinessExceptionCasesBacklog());
}
}
Spring's Dispatcher servlet's configuration file settings