在工作中遇到了利用quartz的定时调度任务,在此记录下来,以备后用:
上代码:
1.在pom中引入quartz的文件:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
2.建一个service配置调度:
@Component
public class SendFileSchedulerService {
/**
*
* 方法名: doSchedule
* 方法功能描述: 执行发送调度任务
* @param: void
* @return: void
* @Author:
* @Create Date:
*/
public void doSchedule(){
Date date = new Date();
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTime(date);
int minute = calendar.get(Calendar.MINUTE);
calendar.set(Calendar.MINUTE, minute+IshareConstant.SEND_INTERVAL);
try{
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobKey jobKey = new JobKey("sendFileJob");
if (scheduler.checkExists(jobKey)) {
scheduler.deleteJob(jobKey);
}
JobDetail jobDetail = JobBuilder.newJob(SendStandardFileTask.class)
.withIdentity("sendFileJob",Scheduler.DEFAULT_GROUP).build();
Trigger trigger =(SimpleTrigger)TriggerBuilder.newTrigger()
.withIdentity("sendFileTrigger", Scheduler.DEFAULT_GROUP)
.startAt(calendar.getTime()).build();
scheduler.scheduleJob(jobDetail, trigger );
scheduler.start();
}catch(Exception e){
e.printStackTrace();
}
}
}
其中常量配置:
IshareConstant.SEND_INTERVAL=5; 为过5分钟调度该任务计划。
SendStandardFileTask 为要运行的任务类。
3.建一个基于job的调度任务:
public class SendStandardFileTask implements Job {
private static Log log = LogFactory.getLog(SendStandardFileTask.class);
public void execute(JobExecutionContext context)
throws JobExecutionException {
Object object = DhccApplicationContext.getBean("standardSyncAction");
if (object != null) {
StandardSyncAction standardSyncAction = (StandardSyncAction)object;
standardSyncAction.sendStandardFile();
}
}
}
sendStandardFile为真实的任务处理方法。
4.在需要调度处理的地方调用:
sendFileSchedulerService.doSchedule();
这样就可以在5分钟后触发该调度任务
如果在@test类中测试调度任务,需要
@Test
public void doSchedule(){
SendFileSchedulerService scheduler=(SendFileSchedulerService)getObj("sendFileSchedulerService");
try {
scheduler.doSchedule();
for(int i=0;i<1;){
Thread.sleep(60000);
}
} catch (Exception e) {
e.printStackTrace();
}
}