一、SpringBoot整合QuartZ实现简单的定时任务demo
1.介绍:
定时任务调度是Java开发中不可或缺的重要部分,但是Java自带的Time等任务调度类在实际项目中不好用。所以Quartz和Spring Task就成了我们项目开发技术选型最多的,在这里我们着重探讨一下Quartz在Spring Boot 2.X版本中的使用。
2.QuartZ设计架构:
- 介绍:
1. Job - 任务
2. JobDetail - 任务描述
3. Trigger - 触发器r
4. Scheduler - 任务调度器 - 图示:
多个定时任务的图示:
3. code
1.pom依赖:
<!--spring boot集成quartz-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
2.job
public class jobDemo1 extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//获取JobDetail中关联的数据
String msg = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("msg");
System.out.println("current time :"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "---" + msg);
}
}
3.config
@Configuration
public class QuartzConfig {
@Bean
public JobDetail testJobDetail(){
//jobDemo1我们的业务类
return JobBuilder.newJob(jobDemo1.class)
//可以给该JobDetail起一个id
.withIdentity("JobDetaildemo1")
//每个JobDetail内都有一个Map,包含了关联到这个Job的数据,在Job类中可以通过context获取
//关联键值对
.usingJobData("msg", "Hello Quartz")
//即使没有Trigger关联时,也不需要删除该JobDetail
.storeDurably()
.build();
}
@Bean
public Trigger printTimeJobTrigger() {
//cron表达式
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/1 * * * * ?");
return TriggerBuilder.newTrigger()
//关联上述的JobDetail
.forJob(testJobDetail())
//给Trigger起个名字
.withIdentity("quartzTaskServicedemo1")
//绑定调度器
.withSchedule(cronScheduleBuilder)
.build();
}
}
二、总结:
- 任务调度器有两种设置方式:
- simpleSchedule() - 通过设置属性的方式。
- cronSchedule(String cron) - 通过一个cron定时任务表达式来设置。
- Spring Boot集成quartz还是比较简单的。
其实还有更高级的用法,就是前台动态创建和控制定时任务。
大家先把这种最简单的基本用法熟练掌握。