- 基于注解实现静态简易定时任务
- 集成
Quartz实现动态定时任务
前言
先理一理定时任务
定时任务的本质,有三大步
1. Job:要执行的任务,比如定时传输文件,定时更新某些数据,等等操作。
2. Trigger:Job 的执行规则,比如什么时候执行,执行间隔,执行次数,等等规则。
3. Scheduler:有了Job,有了Trigger,但 用哪个Trigger执行哪个Job?这时候就轮到Scheduler登场了
一、基于注解实现静态简易定时任务
直接上代码,这个比较简单,主要关注里面的 cron 表达式,详细语法可点击这里
@Configuration
@EnableScheduling
public class StaticScheduleTask {
@Scheduled(cron = "0/5 * * * * ?") // 每隔5秒执行一次
public void configurationTask(){
System.out.println("执行定时任务="+ LocalDateTime.now());
getData();
}
public static void getData(){
Map<String, Object> map = new HashMap<>();
map.put("001", "zhangsan");
map.put("002", "lisi");
System.out.println(map);
}
二、集成 Quartz 实现动态定时任务
上代码
/**
* @Description Job 定时任务要完成的工作
*/
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) {
System.out.println("正在执行Job"+LocalDateTime.now());
}
}
public class MyScheduler {
public static void main(String[] args) throws SchedulerException {
// 1、创建调度器Scheduler
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
// 2、创建JobDetail实例,并与MyJob类绑定(Job执行内容)
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.usingJobData("jobDetail1", "这个Job用来测试的")
.withIdentity("job1", "group1").build();
// 3、构建Trigger实例,每隔1s执行一次
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1")
.usingJobData("trigger1", "这是jobDetail1的trigger")
.startNow()//立即生效
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build();
//4、执行
scheduler.scheduleJob(jobDetail, cronTrigger);
System.out.println("--------scheduler start ! ------------");
scheduler.start();
System.out.println("--------scheduler shutdown ! ------------");
}