引入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進行使用,這是通常用法,還在繼續熟悉中。