Java的作業(yè)調度類庫Quartz基本使用指南
一、常用接口:
1、Job接口:該接口只有一個方法
void execute(JobExecutionContext context)
開發(fā)者實現(xiàn)該接口定義需要執(zhí)行的任務。JobExecutionContext類提供調度上下文的各種信息
2、JobDetail:用于描敘Job實現(xiàn)類及其他的一些靜態(tài)信息
3、Trigger:描敘觸發(fā)Job執(zhí)行的時間觸發(fā)規(guī)則
4、Calendar:定義了一個關聯(lián)Trigger可能(或者不可能)觸發(fā)的時間空間。它沒有定義觸發(fā)的真實時間,而是用在在普通的Schedule需要限制Trigger觸發(fā)的時候。大部分Calendar包含默認所有的時間,并且用戶去排除部分時間。
5、Scheduler:運行容器,使用SchedulerFactory創(chuàng)建Scheduler實例
二、代碼示例:
1、使用Quartz,需要實現(xiàn)Job接口;
public class TestJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Hello World! - " + new Date());
//do more...
}
}
2、調度【比較簡單,直接看代碼就可以了】
public class quartzTest {
public static void main(String args[]) throws SchedulerException, ParseException {
JobDetail jobDetail= JobBuilder.newJob(TestJob.class)
.withIdentity("testJob_1","group_1")
.build();
Trigger trigger= TriggerBuilder
.newTrigger()
.withIdentity("trigger_1","group_1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(10) //時間間隔
.withRepeatCount(5) //重復次數(shù)(將執(zhí)行6次)
)
.build();
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
sched.scheduleJob(jobDetail,trigger);
sched.start();
}
}
這里使用的是2.2.1版本,參考官方文檔的示例??吹揭恍﹨⒖紩褂玫陌姹颈容^老,所以會有一些出入,很多方法都被棄用了,所以還是直接看文檔比較實在,Quartz的官方網(wǎng)站地址是:http://www.quartz-scheduler.org/
三、Quartz2.2.1配置文件示例
# Default Properties file for use by StdSchedulerFactory # to create a Quartz Scheduler Instance, if a different # properties file is not explicitly specified. # #集群配置 org.quartz.scheduler.instanceName: DefaultQuartzScheduler org.quartz.scheduler.rmi.export: false org.quartz.scheduler.rmi.proxy: false org.quartz.scheduler.wrapJobExecutionInUserTransaction: false org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount: 10 org.quartz.threadPool.threadPriority: 5 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true org.quartz.jobStore.misfireThreshold: 60000 #============================================================================ # Configure JobStore #============================================================================ #默認配置,數(shù)據(jù)保存到內(nèi)存 #org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore #持久化配置 org.quartz.jobStore.class:org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.useProperties:true #數(shù)據(jù)庫表前綴 org.quartz.jobStore.tablePrefix:qrtz_ org.quartz.jobStore.dataSource:qzDS #============================================================================ # Configure Datasources #============================================================================ #JDBC驅動 org.quartz.dataSource.qzDS.driver:com.mysql.jdbc.Driver org.quartz.dataSource.qzDS.URL:jdbc:mysql://localhost:3306/quartzdb org.quartz.dataSource.qzDS.user:root org.quartz.dataSource.qzDS.password:123456 org.quartz.dataSource.qzDS.maxConnection:10
四、數(shù)據(jù)庫相關
持久化須事先在相應數(shù)據(jù)庫創(chuàng)建Quartz的數(shù)據(jù)表,在Quartz發(fā)布包里面的docs/dbTables有對應不同數(shù)據(jù)庫的SQL腳本
例如,這里使用的是MYSQL:

數(shù)據(jù)表字段解釋:
- 表qrtz_job_details: 保存job詳細信息,該表需要用戶根據(jù)實際情況初始化
- job_name:集群中job的名字,該名字用戶自己可以隨意定制,無強行要求
- job_group:集群中job的所屬組的名字,該名字用戶自己隨意定制,無強行要求
- job_class_name:實現(xiàn)類的完全包名,quartz就是根據(jù)這個路徑到classpath找到該job類
- is_durable:是否持久化,把該屬性設置為1,quartz會把job持久化到數(shù)據(jù)庫中
- job_data:一個blob字段,存放持久化job對象
- 表qrtz_triggers: 保存trigger信息
- trigger_name: trigger的名字,該名字用戶自己可以隨意定制,無強行要求
- trigger_group:trigger所屬組的名字,該名字用戶自己隨意定制,無強行要求
- job_name: qrtz_job_details表job_name的外鍵
- job_group: qrtz_job_details表job_group的外鍵
- trigger_state:當前trigger狀態(tài),設置為ACQUIRED,如果設置為WAITING,則job不會觸發(fā)
- trigger_cron:觸發(fā)器類型,使用cron表達式
- 表qrtz_cron_triggers:存儲cron表達式表
- trigger_name: qrtz_triggers表trigger_name的外鍵
- trigger_group: qrtz_triggers表trigger_group的外鍵
- cron_expression:cron表達式
- 表qrtz_scheduler_state:存儲集群中note實例信息,quartz會定時讀取該表的信息判斷集群中每個實例的當前狀態(tài)
- instance_name:之前配置文件中org.quartz.scheduler.instanceId配置的名字,就會寫入該字段,如果設置為AUTO,quartz會根據(jù)物理機名和當前時間產(chǎn)生一個名字
- last_checkin_time:上次檢查時間
- checkin_interval:檢查間隔時間
相關文章
Java數(shù)據(jù)類型分類與基本數(shù)據(jù)類型轉換
這篇文章主要介紹了Java數(shù)據(jù)類型分類與基本數(shù)據(jù)類型轉換,Java的數(shù)據(jù)類型主要分為兩類,基本數(shù)據(jù)類型、引用數(shù)據(jù)類型,下文詳細介紹,感興趣的朋友可以參考一下2022-07-07
idea SpringBoot+Gradle環(huán)境配置到項目打包
Gradle是一個基于Java應用的項目自動化構建工具,本文介紹了在IDEA中創(chuàng)建Spring Boot Gradle項目,項目配置包括init.gradle和settings.gradle,感興趣的可以了解一下2024-11-11
Java實現(xiàn)的生成二維碼統(tǒng)計掃描次數(shù)并轉發(fā)到某個地址功能詳解
這篇文章主要介紹了Java實現(xiàn)的生成二維碼統(tǒng)計掃描次數(shù)并轉發(fā)到某個地址功能,可實現(xiàn)生成帶統(tǒng)計功能的二維碼,涉及java二維碼的生成、參數(shù)傳遞、解析等相關操作技巧,需要的朋友可以參考下2018-07-07

