定时任务框架Quartz

       在Spring Boot 中要实现定时任务,有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用Quartz。

1.Scheduled 这种用法非常简单,涉及到的业务非常简单是可以使用该用法。

2. Quartz

quartz的核心类有以下三个需要牢记:

调度器:Scheduler

触发器:Trigger

作业类:JobDetail

该图片用了 DistressRroke _chen的文章中的图片

详细见:https://blog.csdn.net/cms18374672699/article/details/87906910?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

文章中讲的也很清楚,这里就不做搬运工了。

 

 

贴了几张图片,其实关键的代码见下面这部分:/**
* 定时任务框架Quartz的基本组成部分:
* 调度器:Scheduler
* 任务:JobDetail
* 触发器:Trigger,包括SimpleTrigger和CronTrigger
*
* Scheduler
* - -
* - -
* - -
* - -
* JobDetail Trigger
*
*
* @author Administrator
* @Description:
* @Auther: liangsh
* @Date: 2020/5/28 17:47
*/

@Configuration
public class QuartzConfig {


/**
* jobDetail
* @return
*/
@Bean
JobDetailFactoryBean jobDetailFactoryBean1() {
JobDetailFactoryBean bean = new JobDetailFactoryBean();
bean.setJobClass(MyJob1.class);

//可以不传递参数
// JobDataMap data = new JobDataMap();
// data.put("helloService", helloService());
// bean.setJobDataMap(data);

return bean;
}

/**
*JobDetail绑定指定的Job,每次Scheduler调度执行一个Job的时候,首先会拿到对应的Job,然后创建该Job实例,
* 再去执行Job中的execute()的内容,任务执行结束后,关联的Job对象实例会被释放,且会被JVM GC清除。
* @return
*/
@Bean
JobDetailFactoryBean jobDetailFactoryBean2() {
JobDetailFactoryBean bean = new JobDetailFactoryBean();
bean.setJobClass(MyJob2.class);
JobDataMap data = new JobDataMap();
// 使用JobDataMap 传递参数
data.put("helloService", helloService());
bean.setJobDataMap(data);
return bean;
}

/**
* CroTrigger是基于Cron表达式的,可以灵活设置定时器执行
* @return
*/
@Bean
CronTriggerFactoryBean cronTriggerFactoryBean2() {
CronTriggerFactoryBean bean = new CronTriggerFactoryBean();
bean.setCronExpression("0/20 * * * * ?");
bean.setJobDetail(jobDetailFactoryBean2().getObject());
return bean;
}

/**
* 触发器
* @return
*/
@Bean
CronTriggerFactoryBean cronTriggerFactoryBean1() {
CronTriggerFactoryBean bean = new CronTriggerFactoryBean();
bean.setCronExpression("0/5 * * * * ?");
bean.setJobDetail(jobDetailFactoryBean1().getObject());
return bean;
}

/**
* SchedulerFactoryBean为调度器
* @return
*/
@Bean
SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean bean = new SchedulerFactoryBean();
// 添加Trigger,多个 Trigger 可以用逗号分隔
// bean.setTriggers(simpleTriggerFactoryBean().getObject(), cronTriggerFactoryBean2().getObject());
bean.setTriggers(cronTriggerFactoryBean1().getObject(), cronTriggerFactoryBean2().getObject());
return bean;
}

@Bean
HelloService helloService() {
return new HelloService();
}
}

关键的关键还是要自己敲代码,光看不写,理解的还是不深刻,是懂非懂的。 该文章没有几个字,全部靠图片和代码来凑了。

运行结果如下:

_江南一点雨 的文章写得非常好,但是一定要自己写代码跑一跑。https://blog.csdn.net/u012702547/article/details/102748267?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159062802619724848342011%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=159062802619724848342011&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_blog_default-2-102748267.pc_v2_rank_blog_default&utm_term=quartz