java中有关但是任务api——java.util.Timer
简单定时任务:
public class TimerTaskApp {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("timer task run...");
}
};
timer.schedule(task,0,2000);
}
}
流行定时任务框架:Quartz、Spring Task
工作/任务(job)、工作明细(JobDetail,指定工作)、触发器(Trigger ,绑定工作明细)、调度器(Scheduler)
一.Quartz
- 依赖:spring-boot-starter-quartz
- 自定义任务类,继承:QuartzJobBean,继承抽象方法,
- 配置类:定义工作明细和触发器方法
package com.itheima.config;
import com.itheima.quartz.MyQuartz;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QuartzConfig {
@Bean
public JobDetail printJobDetail(){
//绑定具体的工作,storeDurably持久化操作
return JobBuilder
.newJob(自定义任务类.class)
.storeDurably()
.build();
}
@Bean
public Trigger printJobTrigger(){
ScheduleBuilder schedBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");//分/秒,时/分,日/时,月/日,年/月,星期
//绑定对应的工作明细
return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(schedBuilder).build();
}
}
为解决工作,指定明细,触发器之间的依赖。提出调度器(Scheduled)
二、Spring Task
- 注解:springboot启动类:@EnableScheduling
- 定时任务/方法上注解:@Scheduled
@Scheduled(cron = "0/1 * * * * ?")
public void print(){
System.out.println(Thread.currentThread().getName()+" :spring task run...");
}
定时任务的详细配置application.yml
调试用:
spring:
task:
scheduling:
pool:
#任务线程池大小 默认1
size: 1
#调度小池名称前缀 默认scheduling_
thread-name-prefix: spring_tasks_
#关闭操作
shutdown:
#线程池关闭时等待所有任务完成
await-termination: false
# 调度线程池关闭前最大等待时间
await-termination-period: 10s