1、导入quartz依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
2、编写定时任务逻辑
public class OrderRecordDeleteJob implements Job {
private static final Logger logger = LoggerFactory.getLogger(OrderRecordDeleteJob.class);
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//这里是定时任务的逻辑部分
}
}
3、开启定时任务
3.1一般JAVA项目在main方法中开启
public static void main(String[] args){
// 1、创建调度器Scheduler
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
// 2、创建JobDetail实例,并与PrintWordsJob类绑定(Job执行内容)
JobDetail jobDetail = JobBuilder.newJob(OrderRecordDeleteJob.class)
.withIdentity("job1", "group1").build();
// 3、构建Trigger实例,每隔1s执行一次
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1")
.startNow()//立即生效
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1)//每隔1s执行一次
.repeatForever()).build();//一直执行
//4、执行
scheduler.scheduleJob(jobDetail, trigger);
System.out.println("--------scheduler start ! ------------");
scheduler.start();
}
3.2web项目可以通过实现ServletContextListener来启动定时器(这里使用了CronTrigger,CronTrigger功能非常强大,是基于日历的作业调度,以及基于Cron表达式的)
@WebListener
public class OrderServletStartupListener implements ServletContextListener {
private static final Logger logger = LoggerFactory.getLogger(OrderServletStartupListener.class);
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
//初始化定时任务
try{
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
JobDetail jobDetail = JobBuilder.newJob(OrderRecordDeleteJob.class)
.withIdentity("orderRechargeRecordDelete", "orderJob").build();
//每天凌晨3点执行一次清除记录任务
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1")
.usingJobData("trigger1", "orderTrigger")
.startNow()//立即生效
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 3 * * ?"))
.build();
scheduler.scheduleJob(jobDetail, cronTrigger);
scheduler.start();
}
catch (Exception e){
logger.error("OrderRecordDeleteJob start fail");
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
}
4、 CronTrigger的一些常用表达式
推荐一个生成表达式的工具网站:https://cron.qqe2.com/