定时任务
● 定时任务是企业级应用中的常见操作
◆ 年度报表
◆ 缓存统计报告
◆ .......
● 市面上流行的定时任务技术
◆ Quartz
SpringBoot:整合Quartz
● 相关概念
◆ 工作(ob):用于定义具体执行的工作
◆ 工作明细(JobDetail):用于描述定时工作相关的信息
◆ 触发器(Trigger):用于描述触发工作的规则,通常使用cron表达式定义调度规侧
◆ 调度器(Scheduler):描述了工作明细与触发器的对应关系
● 导入坐标
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
● 定义具体要执行的任务,继承QuartzJobBean
public class MyQuartz extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
Date date = new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateTime = sdf.format(date);
System.out.println(dateTime);
}
}
● 定义工作明细与触发器,并绑定对应关系
@Configuration
public class QuartzConfig {
@Bean
public JobDetail printJobDetail(){
//绑定具体的工作
return JobBuilder.newJob(MyQuartz.class).storeDurably().build();
}
@Bean
public Trigger printJobTrigger(){
//绑定对应的工作明细
//"0/15 * * * * ?" 任意年月日的任意时分的0秒开始5秒执行一次的定时器
CronScheduleBuilder schedBuilder=CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(schedBuilder).build();
}
}
Spring Task
1.配置yml
spring:
task:
scheduling:
#任务调度线程池大小默以1
pool:
size: 1
#调度线程名称前缀默认scheduling-
thread-name-prefix: ssm_
shutdown:
#线程池关闭时等待所有任务完成
await-termination: false
#调度线程关闭前最大等待时间,确保最后一定关闭
await-termination-period: 10s
2.使用
1.添加@EnableScheduling注解开启定时任务
@SpringBootApplication
//开启定时任务
@EnableScheduling
public class TaskApplication {
public static void main(String[] args) {
SpringApplication.run(TaskApplication.class, args);
}
}
2.使用
@Component
public class quartz {
@Scheduled(cron = "0/3 * * * * ?")
public void print(){
System.out.println("spring task run");
}
}