1. 程式人生 > 其它 >spring boot整合quartz實現通過頁面操作管理定時任務

spring boot整合quartz實現通過頁面操作管理定時任務

spring boot整合quartz實現通過頁面操作管理定時任務
說起quartz,大家肯定就會想起那些繁雜的配置,複雜的程式碼。但是如果專案中要用到定時任務的話,除了quartz似乎也想不出來別的框架了,畢竟人家做的確實優秀。
但是在spring boot中使用quartz,再也不用像以前那麼大費周章了。spring boot將quartz的實現細節全都給你封裝好了,呼叫定時任務是需要一個小小的註解@Shedule
雖然使用起來簡單,但是他卻能實實在在的達到定時呼叫程式碼的作用。不過我們的野心卻不止於此。
定時任務通過我們配置的cron表示式定期的執行,但是我們看不到這個任務的執行狀態。又比如有些定時任務臨時需要取消,或者只是在大半夜跑那麼一兩次就停止。各種複雜的場景使得純粹的通過cron

表示式已經描述不清我們需要的時間了,此時我們就需要一個可以通過後臺操作來掌控管理定時任務的頁面了。

在使用之前先了解幾個關鍵詞:
Job
通過實現Job類,在實現方法中寫我們具體想要定時任務完成的工作,然後交給quartz管理。
JobDetail
Job只負責實現具體任務,所以還需要藉助JobDetail來儲存一些描述Job的基本資訊。
Quartz JobBuilder
為構造JobDetail實體提供的builder-style API。你可以這樣使用它來構建一個JobDetail

@Bean
public JobDetail jobDetail() {
 return JobBuilder.newJob().ofType(SampleJob.class)
 .storeDurably()
 .withIdentity("Qrtz_Job_Detail")
 .withDescription("Invoke Sample Job service...")
 .build();
}

Spring JobDetailFactoryBean

Spring中配置JobDetail的方式:

@Bean
public JobDetailFactoryBean jobDetail() {
 JobDetailFactoryBean jobDetailFactory = new JobDetailFactoryBean();
 jobDetailFactory.setJobClass(SampleJob.class);
 jobDetailFactory.setDescription("Invoke Sample Job service...");
 jobDetailFactory.setDurability(true);
 return jobDetailFactory;
}

Trigger

觸發器,代表一個排程引數的配置,什麼時候去排程:

@Bean
public Trigger trigger(JobDetail job) {
 return TriggerBuilder.newTrigger().forJob(job)
 .withIdentity("Qrtz_Trigger")
 .withDescription("Sample trigger")
 .withSchedule(simpleSchedule().repeatForever().withIntervalInHours(1))
 .build();
}

Scheduler

排程器,通過JobTrigger來註冊一個排程器:

@Bean
public Scheduler scheduler(Trigger trigger, JobDetail job) {
 StdSchedulerFactory factory = new StdSchedulerFactory();
 factory.initialize(new ClassPathResource("quartz.properties").getInputStream());

 Scheduler scheduler = factory.getScheduler();
 scheduler.setJobFactory(springBeanJobFactory());
 scheduler.scheduleJob(job, trigger);

 scheduler.start();
 return scheduler;
}

以上是使用quartz需要知道的一些概念,其實總結起來就三個東西:job|jobDetailtriggerschedule。也就是任務,觸發器和排程器。所以我們只要用程式碼把他們例項化出來就好了。並且還可以將任務持久化到資料庫中,方便我們去各種操作任務。
quartz會在專案啟動時自動開始執行可執行狀態下的定時任務,而且還可以支援叢集。