quartz 是一个简单的定时任务调度的工具。使用简单。
一 quartz maven导入
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
二 代码使用示例
public class QuartzDemo {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) throws Throwable {
// 1 创建一个计划的实例
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
// 2 创建一个执行任务,设置运行Job的实例接受的类,此类实现org.quartz.Job。
Class<? extends Job> jobClass = MyJob.class;
JobBuilder jobBuilder = JobBuilder.newJob(jobClass);
jobBuilder.withIdentity("myJob"); // 设置个名字
JobDetail jobDetail = jobBuilder.build();
// 3 创建触发器、任务在某时间调度触发,来至少设置的任务。
TriggerBuilder triggerBuilder = TriggerBuilder.newTrigger();
triggerBuilder.withIdentity("myTrigger"); // 给触发器设置个名
triggerBuilder.startNow(); // 立即开始
// 设置任务调度条件
String cronExpression = "*/1 * * * * ?";
triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression));
Trigger trigger = triggerBuilder.build();
// 4 添加计划任务
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
}
public static class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("exec-time:" + new Date());
}
}
}
三 cron:
cron 表达式由七个位置组成,空格分隔
* 秒 0~59
* 分 0~59
* 小时 0~23
* 天 1~31; 注意有的⽉份不⾜31天
* 月 0~11; 或者 JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC
* 周 1~7; 1=SUN或者 SUN,MON,TUE,WEB,THU,FRI,SAT
* 年 1970~2099 可选项 一般很少填写
其中天和星期相互冲突,如果设置天 则星期设置 ?。
输入方向从左至右,通过空格分割。 秒 分 时 天 月 星期 年
其中 * 代表所有,*/n ,n是间隔的时间,n1-n2 (代表范围)
例如:
*/1 * * * * ? 每1秒执行一次
*/10 * * * * ? 每10秒执行一次
1-20/2 * * * * ? 仅在时间的秒数为 1-20范围内,每2秒执行一次。例如2020-05-19 14:08:18 满足条件则执行。
* */1 * * * ? 每1分钟执行一次