简介
Quartz是Job scheduling(作业调度)领域的一个开源项目,Quartz既可以单独使用也可以跟spring框架整合使用,在实际开发中一般会使用后者。使用Quartz可以开发一个或者多个定时任务,每个定时任务可以单独指定执行的时间,例如每隔1小时执行一次、每个月第一天上午10点执行一次、每个月最后一天下午5点执行一次等。
maven坐标:
org.quartz-scheduler
quartz
2.2.1
org.quartz-scheduler
quartz-jobs
2.2.1
org.springframework
spring-context-support
5.0.5.RELEASE
xml配置
创建一个工作类
public classClearImageJob {/*** 定义清理图片的任务*/
public voidclearImageJob(){
System.out.println("clearImageJob......");
}
}
主要配置的内容有
配置自定义Job、任务描述、触发器、调度工厂等
自动扫包
注册任务对象
注册JobDetail
触发器
调度工厂
0/10 * * * * ?
全注解(1)对应xml配置写一一注入就ok
工作类
public classClearImageJob {/*** 定义清理图片的任务*/
public voidclearImagesJob(){
System.out.println("clearImageJob......");
}
}
@Configurationpublic classQuartzConfig {//
@BeanpublicClearImageJob clearImageJob() {
ClearImageJob clearImageJob= newClearImageJob();returnclearImageJob;
}//
@BeanpublicMethodInvokingJobDetailFactoryBean clearImgJobDetail(ClearImageJob clearImageJob) {
MethodInvokingJobDetailFactoryBean clearImgJobDetail= newMethodInvokingJobDetailFactoryBean();
clearImgJobDetail.setTargetObject(clearImageJob);
clearImgJobDetail.setTargetMethod("clearImagesJob");returnclearImgJobDetail;
}
@BeanpublicCronTriggerFactoryBean cronTriggerFactoryBean(MethodInvokingJobDetailFactoryBean clearImgJobDetail) {
CronTriggerFactoryBean cronTriggerFactoryBean= newCronTriggerFactoryBean();
cronTriggerFactoryBean.setJobDetail(clearImgJobDetail.getObject());////////0/10 * * * * ?
cronTriggerFactoryBean.setCronExpression("0/10 * * * * ?");returncronTriggerFactoryBean;
}
@BeanpublicSchedulerFactoryBean schedulerFactoryBean(CronTriggerFactoryBean cronTriggerFactoryBean){
SchedulerFactoryBean schedulerFactoryBean= newSchedulerFactoryBean();
schedulerFactoryBean.setTriggers(cronTriggerFactoryBean.getObject());returnschedulerFactoryBean;
}
}
按照xml顺序配置下来测试没问题。
全注解配置(2),推荐用法,非常简洁
首先有一个配置类
@Configuration
@EnableScheduling
@ComponentScan("cn.zys.quartzs")public classTestQAnnoConfig {
}
@EnableScheduling 开启定时任务功能
然后扫描定时任务所在包
使用定时任务
@Componentpublic classTestQAnno {//@Scheduled(cron = "*/5 * * * * SUN-MON")
@Scheduled(cron = "0/10 * * * * ?")public voidtest() {
System.out.println("计时任务....");
}
}