Quartz:作业调度

内容分享2周前发布
0 0 0

Quartz:作业调度

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();

}

}

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...