
Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵 活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有许多特征,如:数据库支持,集群,插件,EJB作业预构 建,JavaMail及其它,支持cron-like表达式等等。
现有定时任务框架:
1)简单的有Java自带的Timer、 ScheduledExecutorService, Spring自带的Task。
2)相较复杂的分布式定时任务中间件有XXL-JOB、ElasticJob等。
选Quartz理由:
1)任务Tigger能够被持久化,这样即使在发布后,任务依然能够执行,不需要重新设定。
2)能够轻松暂停恢复触发器(即下次不会被调度)。
3)支持Calander,Cron表达式等复杂的触发器,可以灵活的编写复杂触发器。
<!–quartz依赖–>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
https://cron.qqe2.com/
public class DownloadJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
String time = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”).format(new Date());
System.out.println(time + “===> 正在下载最新更新的爱情动作片…”);
}
}
@Configuration
public class QuartzConfig {
//构建 JobDetail
@Bean
public JobDetail downloadDetail() {
return JobBuilder.newJob(DownloadJob.class) //具体任务类
//给 JobDetail 起一个 id, 不写也会自动生成唯一的 TriggerKey
.withIdentity(“downloadJobDetail”)
//JobDetail 内部的一个 map, 可以存储有关 Job 的数据, 这里的数据
// 可通过 Job 类中executeInternal方法的参数进行获取
.usingJobData(“job_download”,”download movie”)
.storeDurably() //即使没有Trigger关联时也不删除该Jobdetail
.build();
}
//构建 Trigger 及 Scheduler
@Bean
public Trigger downloadTrigger() {
return TriggerBuilder.newTrigger()
.forJob(downloadDetail()) //关联上面的 jobDetail
.withIdentity(“downloadTrigger”)
.usingJobData(“trigger_download”,”download”)
//cron 表达式设置每隔 5 秒执行一次
.withSchedule(CronScheduleBuilder.cronSchedule(“*/5 * * * * ? *”))
.build();
}
}


