Java的作業調度類庫Quartz基本使用指南_java

來源:互聯網
上載者:User

一、常用介面:
1、Job介面:該介面只有一個方法

void execute(JobExecutionContext context)

開發人員實現該介面定義需要執行的任務。JobExecutionContext類提供調度內容相關的各種資訊

2、JobDetail:用於描敘Job實作類別及其他的一些靜態資訊

3、Trigger:描敘觸發Job執行的時間觸發規則

4、Calendar:定義了一個關聯Trigger可能(或者不可能)觸發的時間空間。它沒有定義觸發的真即時間,而是用在在普通的Schedule需要限制Trigger觸發的時候。大部分Calendar包含預設所有的時間,並且使用者去排除部分時間。

5、Scheduler:運行容器,使用SchedulerFactory建立Scheduler執行個體

二、程式碼範例:

1、使用Quartz,需要實現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) //重複次數(將執行6次)   )  .build(); SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler();  sched.scheduleJob(jobDetail,trigger);  sched.start();  }}

這裡使用的是2.2.1版本,參考官方文檔的樣本。看到一些參考書使用的版本比較老,所以會有一些出入,很多方法都被棄用了,所以還是直接看文檔比較實在,Quartz的官方網站地址是: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: DefaultQuartzSchedulerorg.quartz.scheduler.rmi.export: falseorg.quartz.scheduler.rmi.proxy: falseorg.quartz.scheduler.wrapJobExecutionInUserTransaction: false org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPoolorg.quartz.threadPool.threadCount: 10org.quartz.threadPool.threadPriority: 5org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true org.quartz.jobStore.misfireThreshold: 60000 #============================================================================# Configure JobStore#============================================================================ #預設配置,資料儲存到記憶體#org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore#持久化配置org.quartz.jobStore.class:org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.StdJDBCDelegateorg.quartz.jobStore.useProperties:true#資料庫表首碼org.quartz.jobStore.tablePrefix:qrtz_org.quartz.jobStore.dataSource:qzDS #============================================================================# Configure Datasources#============================================================================#JDBC驅動org.quartz.dataSource.qzDS.driver:com.mysql.jdbc.Driverorg.quartz.dataSource.qzDS.URL:jdbc:mysql://localhost:3306/quartzdborg.quartz.dataSource.qzDS.user:rootorg.quartz.dataSource.qzDS.password:123456org.quartz.dataSource.qzDS.maxConnection:10

四、資料庫相關
持久化須事先在相應資料庫建立Quartz的資料表,在Quartz發布包裡面的docs/dbTables有對應不同資料庫的SQL指令碼

例如,這裡使用的是MYSQL:

資料表欄位解釋:

  • 表qrtz_job_details: 儲存job詳細資料,該表需要使用者根據實際情況初始化
  • job_name:叢集中job的名字,該名字使用者自己可以隨意定製,無強行要求
  • job_group:叢集中job的所屬組的名字,該名字使用者自己隨意定製,無強行要求
  • job_class_name:實作類別的完全包名,quartz就是根據這個路徑到classpath找到該job類
  • is_durable:是否持久化,把該屬性設定為1,quartz會把job持久化到資料庫中
  • 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狀態,設定為ACQUIRED,如果設定為WAITING,則job不會觸發
  • trigger_cron:觸發器類型,使用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會定時讀取該表的資訊判斷叢集中每個執行個體的目前狀態
  • instance_name:之前設定檔中org.quartz.scheduler.instanceId配置的名字,就會寫入該欄位,如果設定為AUTO,quartz會根據物理機名和目前時間產生一個名字
  • last_checkin_time:上次檢查時間
  • checkin_interval:檢查間隔時間

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.