引入xml文件:
<!-- quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
定时任务主体:
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
String jobName = jobExecutionContext.getJobDetail().getJobDataMap().getString("name");
System.out.println("被调用 - 当前"+jobName+"--时间为"+System.currentTimeMillis());
}
启动调度:
public class RunJob {
public static void main(String[] args) throws SchedulerException {
//1.创建Scheduler的工厂
SchedulerFactory sf = new StdSchedulerFactory();
//2.从工厂中获取调度器实例
Scheduler scheduler = sf.getScheduler();
//3.创建JobDetail
JobDetail jb = JobBuilder.newJob(JobTest1.class)
.withDescription("this is a test job") //job的描述
.withIdentity("testJob01", "TestJobGroup") //job 的name和group
.build();
//任务运行的时间,SimpleSchedle类型触发器有效
long time= System.currentTimeMillis() + 3*1000L; //3秒后启动任务
Date statTime = new Date(time);
//4.创建Trigger
//定时任务属性的大部分设置是在这
Trigger t = TriggerBuilder.newTrigger()
.withDescription("")
.withIdentity("testTrigger01", "TestTriggerGroup")
//.withSchedule(SimpleScheduleBuilder.simpleSchedule())
.startAt(statTime) //可设置执行时间
//.startNow() //立即执行
//.endAt(statTime) //可设置停止时间
//.withPriority(5) //设置优先级,当同一时间两个定时任务争夺资源时,优先级较高的将先执行,默认为5,没有上限,建议约定1-10
.withSchedule(
SimpleScheduleBuilder.simpleSchedule() //简单调度表。按固定时间来
.repeatForever() //一直执行
//.withRepeatCount(10) //重复执行次数
.withIntervalInSeconds(1) //隔多长时间重复执行? 1秒
//.withIntervalInMinutes() //分钟
//CalendarIntervalScheduleBuilder.calendarIntervalSchedule() //日程调度表,可以按照日/周/月/年的方式来调度
//DailyTimeIntervalScheduleBuilder.dailyTimeIntervalSchedule() //日程循环调度,可以设定每日的几点到几点,每隔多久,一周的那几天不执行,执行任务,
//CronScheduleBuilder.cronSchedule() //支持linux Cron语法,功能强大,比较复杂
)
.build();
//5.注册任务和定时器
scheduler.scheduleJob(jb, t);
//6.启动 调度器
scheduler.start();
System.out.println("启动时间="+System.currentTimeMillis());
}
}
Quartz简单应用就是如上:
1.JobTest1实现Quartz提供的接口Job,并实现方法execute,成为定时任务主体。
2.main方法中创建调度器,并加入触发器和任务主体,启动触发器,就会按照在触发器中的配置对任务主体进行执行。
3.任务主体的触发规则,全部在触发器的配置中。
4.以上为简单应用,适用场景可能为项目启动时期规避初始化的资源争夺高峰,设置调度器,在高峰结束后进行次优先级的初始化任务。
5.Quartz还可以搭配JDBC进行使用,这是通常用法,还在继续熟悉中。