javaquartz(java quartz)

本文目錄一覽:

如何在java中使用quartz

在java中使用quartz

/** *//**

* 添加一個定時任務,使用默認的任務組名,觸發器名,觸發器組名

* @param jobName 任務名

* @param job 任務

* @param time 時間設置,參考quartz說明文檔

* @throws SchedulerException

* @throws ParseException

*/

public static void addJob(String jobName,Job job,String time)

throws SchedulerException, ParseException{

Scheduler sched = sf.getScheduler();

JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, job.getClass());//任務名,任務組,任務執行類

//觸發器

CronTrigger trigger =

new CronTrigger(jobName, TRIGGER_GROUP_NAME);//觸發器名,觸發器組

trigger.setCronExpression(time);//觸發器時間設定

sched.scheduleJob(jobDetail,trigger);

//啟動

if(!sched.isShutdown())

sched.start();

}

/** *//**

* 添加一個定時任務

* @param jobName 任務名

* @param jobGroupName 任務組名

* @param triggerName 觸發器名

* @param triggerGroupName 觸發器組名

* @param job 任務

* @param time 時間設置,參考quartz說明文檔

* @throws SchedulerException

* @throws ParseException

*/

public static void addJob(String jobName,String jobGroupName,

String triggerName,String triggerGroupName,

Job job,String time)

throws SchedulerException, ParseException{

Scheduler sched = sf.getScheduler();

JobDetail jobDetail = new JobDetail(jobName, jobGroupName, job.getClass());//任務名,任務組,任務執行類

//觸發器

CronTrigger trigger =

new CronTrigger(triggerName, triggerGroupName);//觸發器名,觸發器組

trigger.setCronExpression(time);//觸發器時間設定

sched.scheduleJob(jobDetail,trigger);

if(!sched.isShutdown())

sched.start();

}

/** *//**

* 修改一個任務的觸發時間(使用默認的任務組名,觸發器名,觸發器組名)

* @param jobName

* @param time

* @throws SchedulerException

* @throws ParseException

*/

public static void modifyJobTime(String jobName,String time)

throws SchedulerException, ParseException{

Scheduler sched = sf.getScheduler();

Trigger trigger = sched.getTrigger(jobName,TRIGGER_GROUP_NAME);

if(trigger != null){

CronTrigger ct = (CronTrigger)trigger;

ct.setCronExpression(time);

sched.resumeTrigger(jobName,TRIGGER_GROUP_NAME);

}

}

/** *//**

* 修改一個任務的觸發時間

* @param triggerName

* @param triggerGroupName

* @param time

* @throws SchedulerException

* @throws ParseException

*/

public static void modifyJobTime(String triggerName,String triggerGroupName,

String time)

throws SchedulerException, ParseException{

Scheduler sched = sf.getScheduler();

Trigger trigger = sched.getTrigger(triggerName,triggerGroupName);

if(trigger != null){

CronTrigger ct = (CronTrigger)trigger;

//修改時間

ct.setCronExpression(time);

//重啟觸發器

sched.resumeTrigger(triggerName,triggerGroupName);

}

}

/** *//**

* 移除一個任務(使用默認的任務組名,觸發器名,觸發器組名)

* @param jobName

* @throws SchedulerException

*/

public static void removeJob(String jobName)

throws SchedulerException{

Scheduler sched = sf.getScheduler();

sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME);//停止觸發器

sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME);//移除觸發器

sched.deleteJob(jobName,JOB_GROUP_NAME);//刪除任務

}

/** *//**

* 移除一個任務

* @param jobName

* @param jobGroupName

* @param triggerName

* @param triggerGroupName

* @throws SchedulerException

*/

public static void removeJob(String jobName,String jobGroupName,

String triggerName,String triggerGroupName)

throws SchedulerException{

Scheduler sched = sf.getScheduler();

sched.pauseTrigger(triggerName,triggerGroupName);//停止觸發器

sched.unscheduleJob(triggerName,triggerGroupName);//移除觸發器

sched.deleteJob(jobName,jobGroupName);//刪除任務

}

java quartz 定時需要的包

1.需要的jar包

實現定時任務 需要quartz-1.5.1.jar和commons-logging-1.1.jar。

2.定義定時任務配置類

該類主要進行定時任務時間的設置和設置對應的定時任務類。

import org.quartz.CronTrigger;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.impl.StdSchedulerFactory;

public class Test{

/**

* 定時任務

*/

public static void cleanUpJob() {

try {

JobDetail jobDetail = new JobDetail();

jobDetail.setName(“cleanup”);

jobDetail.setJobClass(PrintJob.class);

CronTrigger trigger = new CronTrigger();

trigger.setName(“cleanupTrigger”);

trigger.setJobName(“cleanup”);

trigger.setCronExpression(“0/5 * * * * ?”);

Scheduler sch = StdSchedulerFactory.getDefaultScheduler();

sch.scheduleJob(jobDetail, trigger);

sch.start();

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 修改定時任務時間

*/

public static void modifyJobTime(String triggerName, String time) {

System.out.println(“modify~~~~~~~~~~~~~~~~”);

try {

Scheduler sched = StdSchedulerFactory.getDefaultScheduler();

System.out.println(“triggerName ” + triggerName);

CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName, Scheduler.DEFAULT_GROUP);

if(trigger == null) {

return;

}

String oldTime = trigger.getCronExpression();

System.out.println(“oldTime ” + oldTime);

if (!oldTime.equalsIgnoreCase(time)) {

System.out.println(“time ” + time);

// 修改時間

trigger.setCronExpression(time);

}

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}

}

public static void main(String[] args) {

cleanUpJob();

modifyJobTime(“cleanupTrigger”, “0/2 * * * * ?”);

}

}

3.定時任務類

該類主要定義定時任務執行的內容。

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

public class PrintJob implements Job{

@Override

public void execute(JobExecutionContext arg0) throws JobExecutionException {

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);

String time = sdf.format(new Date());

System.out.println(“print job” + time);

}

}

4.輸出結果

modify~~~~~~~~~~~~~~~~

triggerName cleanupTrigger

oldTime 0/5 * * * * ?

time 0/2 * * * * ?

print job2014-12-03 17:06:40.031

print job2014-12-03 17:06:42.015

print job2014-12-03 17:06:44.016

print job2014-12-03 17:06:46.019

print job2014-12-03 17:06:48.019

print job2014-12-03 17:06:50.020

從輸出的結果中可以看到,原本的定時任務為每5秒執行一次,但是由於後面對定時任務表達式做了修改,所以後來安照修改後的每2秒執行一次。

java如何利用第三方Quartz實現定時任務

給你一個簡單的案例加詳細註解

/*

* job是一個介面,只有一個方法void execute(JobExecutionContext context),

* 被調度的作業(類)需實現該介面中execute()方法,

* JobExecutionContext類提供了調度上下文的各種信息。每次執行該Job均重新創建一個Job實例

*/

public class MyJob  implements Job {

//MyJob類為需要定時執行的類,execute為定時執行的方法。一個定時任務對應一個Job實現類。

@Override

public void execute(JobExecutionContext arg0) throws JobExecutionException {

// TODO Auto-generated method stub

perform();

}

public void perform(){ //執行報表統計入口函數

//業務邏輯

System.out.println(“執行時間:”+new Date());

}

}

public class QuartzTest5 {

public static void main(String[] args) throws Exception {

//SchedulerFactory 是一個介面,用於Scheduler的創建和管理

SchedulerFactory factory = new StdSchedulerFactory();

//從工廠裡面拿到一個scheduler實例

//計劃表(可能翻譯的不太貼切),現在我們有了要做的內容,

//與調度程序交互的主要API

/*

* Scheduler的生命期,從SchedulerFactory創建它時開始,

到Scheduler調用shutdown()方法時結束;Scheduler被創建後,

可以增加、刪除和列舉Job和Trigger,以及執行其它與調度相關的操作

(如暫停Trigger)。但是,Scheduler只有在調用start()方法後,

才會真正地觸發trigger(即執行job)

*/

Scheduler scheduler = factory.getScheduler();

//具體任務.

//用於定義作業的實例

//JobBuilder – 用於定義/構建JobDetail實例,用於定義作業的實例。

JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity(“job1”, “group1”).build();

//Trigger(即觸發器) – 定義執行給定作業的計劃的組件

//TriggerBuilder – 用於定義/構建觸發器實例

CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(“trigger1”, “group1”)

.withSchedule(CronScheduleBuilder.cronSchedule(“0/1  * * * * ?”)).build();

scheduler.scheduleJob(job, trigger);

scheduler.start();

}

}

Java中定時任務quartz如何將歷史數據寫入新表

我建議的做法是在資料庫中建一些Quartz的表,MySQL的建、刪表腳本,最主要的修改是quartz.properties,如果你使用的是其他資料庫,可以下載Quartz的distribution,在\docs\dbTables下。然後我們可以啟動Bootstrap類,註冊、運行定時任務。你可以發現MySQL的表中已經有此定時任務的記錄了。

然後你可以停止Bootstrap類,將Bootstrap類中關於註冊、啟動定時任務的代碼刪除或注釋,然後啟動Bootstrap類,看上一次操作註冊的定時任務會不會繼續運行。

如無意外,看上一次操作註冊的定時任務會繼續運行。

java quartz job 執行時間配置

第一步:引包

要使用Quartz,必須要引入以下這幾個包:

1、log4j-1.2.16

2、quartz-2.1.7

3、slf4j-api-1.6.1.jar

4、slf4j-log4j12-1.6.1.jar

這些包都在下載的Quartz包裡面包含著,因此沒有必要為尋找這幾個包而頭疼。

第二步:創建要被定執行的任務類

這一步也很簡單,只需要創建一個實現了org.quartz.Job介面的類,並實現這個介面的唯一一個方法execute(JobExecutionContext arg0) throws JobExecutionException即可。如:

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

public class myJob implements Job {

@Override

public void execute(JobExecutionContext arg0) throws JobExecutionException {

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);

System.out.println(sdf.format(new Date()));

}

}

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

public class myJob implements Job {

@Override

public void execute(JobExecutionContext arg0) throws JobExecutionException {

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);

System.out.println(sdf.format(new Date()));

}

}

這個例子很簡單,就不用解說了。

第三步:創建任務調度,並執行

這一步應該算是最難的一步的,但其實是非常簡單的,直接上代碼

import static org.quartz.CronScheduleBuilder.cronSchedule;

import static org.quartz.JobBuilder.newJob;

import static org.quartz.TriggerBuilder.newTrigger;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.CronTrigger;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerFactory;

import org.quartz.impl.StdSchedulerFactory;

public class Test {

public void go() throws Exception {

// 首先,必需要取得一個Scheduler的引用

SchedulerFactory sf = new StdSchedulerFactory();

Scheduler sched = sf.getScheduler();

//jobs可以在scheduled的sched.start()方法前被調用

//job 1將每隔20秒執行一次

JobDetail job = newJob(myJob.class).withIdentity(“job1”, “group1”).build();

CronTrigger trigger = newTrigger().withIdentity(“trigger1”, “group1”).withSchedule(cronSchedule(“0/20 * * * * ?”)).build();

Date ft = sched.scheduleJob(job, trigger);

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);

System.out.println(job.getKey() + ” 已被安排執行於: ” + sdf.format(ft) + “,並且以如下重複規則重複執行: ” + trigger.getCronExpression());

// job 2將每2分鐘執行一次(在該分鐘的第15秒)

job = newJob(myJob.class).withIdentity(“job2”, “group1”).build();

trigger = newTrigger().withIdentity(“trigger2”, “group1”).withSchedule(cronSchedule(“15 0/2 * * * ?”)).build();

ft = sched.scheduleJob(job, trigger);

System.out.println(job.getKey() + ” 已被安排執行於: ” + sdf.format(ft) + “,並且以如下重複規則重複執行: “+ trigger.getCronExpression());

// 開始執行,start()方法被調用後,計時器就開始工作,計時調度中允許放入N個Job

sched.start();

try {

//主線程等待一分鐘

Thread.sleep(60L * 1000L);

} catch (Exception e) {}

//關閉定時調度,定時器不再工作

sched.shutdown(true);

}

public static void main(String[] args) throws Exception {

Test test = new Test();

test.go();

}

}

import static org.quartz.CronScheduleBuilder.cronSchedule;

import static org.quartz.JobBuilder.newJob;

import static org.quartz.TriggerBuilder.newTrigger;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.CronTrigger;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerFactory;

import org.quartz.impl.StdSchedulerFactory;

public class Test {

public void go() throws Exception {

// 首先,必需要取得一個Scheduler的引用

SchedulerFactory sf = new StdSchedulerFactory();

Scheduler sched = sf.getScheduler();

//jobs可以在scheduled的sched.start()方法前被調用

//job 1將每隔20秒執行一次

JobDetail job = newJob(myJob.class).withIdentity(“job1”, “group1”).build();

CronTrigger trigger = newTrigger().withIdentity(“trigger1”, “group1”).withSchedule(cronSchedule(“0/20 * * * * ?”)).build();

Date ft = sched.scheduleJob(job, trigger);

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss SSS”);

System.out.println(job.getKey() + ” 已被安排執行於: ” + sdf.format(ft) + “,並且以如下重複規則重複執行: ” + trigger.getCronExpression());

// job 2將每2分鐘執行一次(在該分鐘的第15秒)

job = newJob(myJob.class).withIdentity(“job2”, “group1”).build();

trigger = newTrigger().withIdentity(“trigger2”, “group1”).withSchedule(cronSchedule(“15 0/2 * * * ?”)).build();

ft = sched.scheduleJob(job, trigger);

System.out.println(job.getKey() + ” 已被安排執行於: ” + sdf.format(ft) + “,並且以如下重複規則重複執行: “+ trigger.getCronExpression());

// 開始執行,start()方法被調用後,計時器就開始工作,計時調度中允許放入N個Job

sched.start();

try {

//主線程等待一分鐘

Thread.sleep(60L * 1000L);

} catch (Exception e) {}

//關閉定時調度,定時器不再工作

sched.shutdown(true);

}

public static void main(String[] args) throws Exception {

Test test = new Test();

test.go();

}

}

OK了,Job1和Job2就會被安排為定時執行了。此時程序是可以執行的了,但是可能會輸出WARN級別日誌,這是因為沒有加log4j的配置文件,加上配置文件,就OK了。這裡需要說明的地方只有一個,其它的可以直接Copy到您的項目裡面。看代碼:

CronTrigger trigger = newTrigger().withIdentity(“trigger1”, “group1”).withSchedule(cronSchedule(“0/20 * * * * ?”)).build();

CronTrigger trigger = newTrigger().withIdentity(“trigger1”, “group1”).withSchedule(cronSchedule(“0/20 * * * * ?”)).build();

原創文章,作者:YDHLO,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/317097.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YDHLO的頭像YDHLO
上一篇 2025-01-11 16:27
下一篇 2025-01-11 16:27

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論