定时任务
一、springTask定时任务
1)新建类,使用注解@Component
与@org.springframework.scheduling.annotation.EnableScheduling
打在类上
2)新建执行方法:使用注解@org.springframework.scheduling.annotation.Scheduled(cron = "0 0 0 * * ?")
(每天晚上12点执行);cron表达式可以在线生成,不会写也没有关系;但是注意只有六位,不支持年
秒 分 时 日 月 周
3)可以使用@Autowired
注入业务层接口,编写自己的代码……
二、quartz定时任务
1)新建类implements org.quartz.Job
,@Override
execute方法,可以使用jobExecutionContext.getScheduler().getContext()
、jobExecutionContext.getJobDetail().getJobDataMap()
或jobExecutionContext.getTrigger().getJobDataMap()
来获取业务代码所需要的参数,(使用同一对象传入/获取参数,如:使用任务实例传入,执行时就需要使用任务实例获取)
2)业务类中新建方法,使用org.quartz.impl.StdSchedulerFactory.getDefaultScheduler();
获取默认定时任务对象
3)创建触发器和任务对象:
//一分钟后执行
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("触发器1" , "触发器分组")
.startAt(new Date(System.currentTimeMillis() + 60 * 1000))
.forJob("任务实例1", "任务组")
.build();
JobDetail job = JobBuilder.newJob(QuotationReservedJob.class)
.withIdentity("任务实例1", "任务组")
.usingJobData("param1", "param1")
.usingJobData("param2", "param2")
.usingJobData("param3", "param3")
.build();
scheduler.scheduleJob(job, trigger);
scheduler.start();
4)触发器与任务实例的名称必须唯一,否则多用户执行会报异常
5)触发器中有各种方式去定义如何执行定时任务
6)创建任务实例JobBuilder.newJob(Class<? extends org.quartz.Job> clazz),也就是①中新建的类
7)将任务实例与触发器组合定时任务,start方法启动,shutdown方法终止
8)使用scheduler对象:
- 根据任务名称和分组,获取
org.quartz.JobKey jobKey = org.quartz.JobKey.jobKey(jobName, jobGroup);
可以操作已有任务实例 - 删除
scheduler.deleteJob(JobKey var1);
- 暂停
scheduler.pauseJob(JobKey var1);
- 恢复
scheduler.resumeJob(JobKey var1);
- 运行一次
scheduler.triggerJob(JobKey var1);
9)在实现了Job接口的类中,注入service层接口
https://blog.csdn.net/zhaoqiangbo/article/details/113725486