Quartz - Quartz簡單入門
一、相關介紹
Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源專案,是完全由Java開發的一個開源的任務日程管理系統
二、概念和類
Job:要執行的作業類所實現的介面
JobDetail:定義作業例項的詳細資訊屬性
Trigger:觸發器介面,Quartz中提供了SimpleTrigger、CronTirgger和Calendar等多種觸發器
Scheduler:任務記錄表,排程器例項
三、儲存方式
RAMJobStore:不要外部資料庫,配置容易,執行速度快
JDBCJobStore:支援叢集,所有的任務資訊都會儲存到資料庫中。可以控制事物;應用伺服器關閉或者重啟,任務資訊都不會丟失且可以恢復因此而導致執行失敗的任務
四、執行緒模型
排程主執行緒:QuartzScheduler被建立時會建立一個QuartzSchedulerThread的排程主執行緒例項
任務執行執行緒:Quartz不會在主執行緒(QuartzSchedulerThread)中處理使用者的Job,而是把執行緒管理的職責委託給ThreadPool,一般的設定是使用SimpleThreadPool。SimpleThreadPool建立了一定數量的WorkerThread例項來使得Job能夠線上程中進行處理。WorkerThread是定義在SimpleThreadPool類中的內部類,它實質上就是一個執行緒
五、使用示例
Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源專案,是完全由Java開發的一個開源的任務日程管理系統
二、概念和類
Job:要執行的作業類所實現的介面
JobDetail:定義作業例項的詳細資訊屬性
Trigger:觸發器介面,Quartz中提供了SimpleTrigger、CronTirgger和Calendar等多種觸發器
Scheduler:任務記錄表,排程器例項
三、儲存方式
RAMJobStore:不要外部資料庫,配置容易,執行速度快
JDBCJobStore:支援叢集,所有的任務資訊都會儲存到資料庫中。可以控制事物;應用伺服器關閉或者重啟,任務資訊都不會丟失且可以恢復因此而導致執行失敗的任務
四、執行緒模型
排程主執行緒:QuartzScheduler被建立時會建立一個QuartzSchedulerThread的排程主執行緒例項
任務執行執行緒:Quartz不會在主執行緒(QuartzSchedulerThread)中處理使用者的Job,而是把執行緒管理的職責委託給ThreadPool,一般的設定是使用SimpleThreadPool。SimpleThreadPool建立了一定數量的WorkerThread例項來使得Job能夠線上程中進行處理。WorkerThread是定義在SimpleThreadPool類中的內部類,它實質上就是一個執行緒
五、使用示例
package com.xl.quartz;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*自定義任務類
*/
public class SimpleJob implements Job {
private static Logger LOG = LoggerFactory.getLogger(SimpleJob.class);
private String desc;
/**
* Job是一個介面,只有一個execute方法,JobExecutionContext提供了任務排程的上下文資訊
*/
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println(context.getJobDetail().getJobDataMap().get("desc")); // 非空
System.out.println(this.desc); // 為空
LOG.debug("Job start, time={}.", new Date().getTime());
}
public void setDesc(String desc) {
this.desc = desc;
}
}
package com.xl.quartz;
import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Quartz啟動類
*
*/
public class SimpleQuartzMain {
private static Logger LOG = LoggerFactory.getLogger(SimpleJob.class);
public static void main(String[] args) throws SchedulerException {
/**
* 1. 建立Scheduler的工廠
*/
SchedulerFactory sf = new StdSchedulerFactory();
/**
* 2. 從工廠中獲取排程器例項
*/
Scheduler scheduler = sf.getScheduler();
/**
* 3. 建立JobDetail,定義任務的實現細節和相關屬性
*/
JobDetail simpleJobDetail = new JobDetail("simpleJD", "simpleGP", SimpleJob.class); // 設定名字和組名標識當前任務細節
simpleJobDetail.getJobDataMap().put("desc", "Description(By JobDataMap)."); // 如果Job有引數需要設定,可以從這裡賦值 (測試1.6.x,非整合Spring時不能給Job的同名屬性自動注入)
/**
* 4. 建立Trigger,定義觸發規則
* 如果嵌入的事件只觸發一次或者以固定時間間隔觸發,則使用SimpleTrigger比較合適
* 如果嵌入的事件以固定的時間點如每天十點觸發,則使用CronTrigger比較合適
*/
SimpleTrigger simpleTrigger = new SimpleTrigger("simpleST", "simpleTG"); // 設定名字和組名標識當前觸發器
simpleTrigger.setStartTime(new Date(System.currentTimeMillis() + 2 * 1000L)); // 設定開始時間,延時2秒鐘
simpleTrigger.setRepeatInterval(2000); // 設定多久重複一次,2秒鐘一次
simpleTrigger.setRepeatCount(-1); // -1表示無限次數,0表示只執行一次,預設0
/**
* 5. 註冊任務和定時器
*/
scheduler.scheduleJob(simpleJobDetail, simpleTrigger);
/**
* 6. 啟動排程器
*/
scheduler.start();
LOG.info("Scheduler start...");
}
}
六、補充配置
#log4j config
log4j.rootLogger = debug,system.out
log4j.appender.system.out=org.apache.log4j.ConsoleAppender
log4j.appender.system.out.layout=org.apache.log4j.PatternLayout
log4j.appender.system.out.layout.ConversionPattern=%d %p [%c] [%t] [%F:%L] - <%m>%n
<!-- pom.xml -->
<dependency>
<groupId>org.opensymphony.quartz</groupId>
<artifactId>quartz</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
相關文章
- Quartz 簡單使用quartz
- Quartz.NET 使用入門整理一(官網demo簡單分析)quartz
- Quartz.NET 使用入門整理二(搭建quartz.net專案)quartz
- 任務排程框架Quartz快速入門!框架quartz
- c# Quartz.net的簡單封裝C#quartz封裝
- Quartz定時任務框架(一) 入門案例quartz框架
- Quartz - Spring和Quartz的整合quartzSpring
- Quartz入門及觸發器與Trigger的介紹&&Spring task Vs Quartz的比較quartz觸發器Spring
- 簡單說說Java 定時任務框架---QuartzJava框架quartz
- quartz學習-quartz編碼方式實現定時任務簡例quartz
- Quartz初探quartz
- 一文快速入門任務排程框架-Quartz框架quartz
- Quartz定時任務框架(二) Quartz詳解quartz框架
- .NET Core 基於Quartz的UI視覺化操作元件 GZY.Quartz.MUI 簡介quartzUI視覺化元件
- Quartz 使用教程quartz
- Quartz 學習quartz
- Quartz.net 3.x使用總結(一)——入門介紹quartz
- SpringBoot 整合 Quartz + MySQLSpring BootquartzMySql
- 【Springboot】快速整合QuartzSpring Bootquartz
- spring-quartz整合Springquartz
- Quartz原理解密quartz解密
- Quartz.NET 2.x 文件翻譯 - Lesson 1:使用Quartzquartz
- Quartz - Spring整合Quartz實現叢集的定時任務quartzSpring
- Quartz框架中的Schedulerquartz框架
- Quartz:基本用法總結quartz
- ApiBoot - ApiBoot Quartz 使用文件APIbootquartz
- Quartz job scheduler 學習quartz
- Quartz (2) - 動態操作quartz
- 排程器Quartz的簡述與使用總結quartz
- Quartz.Net系列(六):Quartz五大構件Trigger之TriggerBuilder解析quartzUI
- Quartz 2D程式設計指南 (一) —— 簡介(一)quartz程式設計
- Quartz.NET整合UI版quartzUI
- springmvc+quartz叢集+sqlserverSpringMVCquartzSQLServer
- 架構 規則引擎 quartz架構quartz
- Quartz在Spring中叢集quartzSpring
- 深入解讀Quartz的原理quartz
- 石英定時任務-quartzquartz
- Quartz.NET 2.x 文件翻譯 - Lesson 12:Quartz的其他各種特性quartz