動態配置Quartz定時任務的思路

2021-09-01 21:52:04 字數 2559 閱讀 1659

本文前置條件:quartz 2.2.1, spring 3.1以上版本,quartz 2以下類似,只是具體類中對於配置動態任務寫法不同。本文所說的動態是指把定時任務動態配置在資料庫中。

本文只是簡單的寫下思路,寫的不好請見諒!

主要思路如下:

1)首先配置乙個定時任務的類,taskinfo,可以如下

/**

* 定時任務資訊

* */

public class taskinfo

public void setjobid(long jobid)

public string getjobclass()

public void setjobclass(string jobclass)

public string getjobname()

public void setjobname(string jobname)

public string getjobgroup()

public void setjobgroup(string jobgroup)

public string getjobstatus()

public void setjobstatus(string jobstatus)

public string getcronexpression()

public void setcronexpression(string cronexpression)

public string getdesc()

public void setdesc(string desc)

}

2)要想動態配置,必須先配置乙個後台定時任務在一定間隔內掃瞄表中的資料,且該後台定時任務不能重複配置,徹底點就是禁止改後台定時任務出現在表中

3)為和後台定時任務區分,可以定義乙個抽象類,具體類必須實現該類的方法。抽象類中的方法可以類似於 execute(long taskid),這樣好處是可以在資料庫中配置一張定時任務執行參數列,不配置參數列也行。

4)具體功能的類實現抽象類

5)由於在類中配置定時任務時候,建立jobdetail時候具體任務類必須實現job介面,如下所示

jobdetail jobdetail = jobbuilder.newjob(taskregjob.class)

.withidentity(task.getjobname(), task.getjobgroup())

.build();

所以要乙個實現了job介面的定時任務作為中介,該定時任務以配置的cron表示式執行,在

public void execute(jobexecutioncontext context)

throws jobexecutionexception catch (schedulerexception e)

判斷是否正在執行:

private static boolean isrunning(jobkey jobkey, list runningjobs)

throws exception

} return rtn;

}

得到當前配置的所有定時任務:

groupmatchermatcher = groupmatcher.anyjobgroup();

try

刪除定時任務:

boolean rtn = scheduler.deletejob(jobkey);
刪除的定時任務在下次啟動時生效

在taskregjob定時任務中,使用taskid去資料庫取定時任務資訊,如果取不到說明該定時任務已經被刪除,只是用於正在執行所以不滿足執行完成條件沒有被刪除,這時候可以這樣做:

try  catch (throwable ex)  catch (schedulerexception e) 

throw new jobexecutionexception("任務執行異常,任務id:" + taskid

+ ",有可能的原因是,此任務已經加入排程,執行時此任務已經被刪除", ex);

}

說明,得到當前定時任務配置的資料方法如下:

jobdatamap data = context.getjobdetail().getjobdatamap();
這樣做了之後,該定時任務就在下次啟動時刪除不會啟動。

得到當前正在執行的普通定時任務(非後台)方法如下:

for (iter = runningjobs.iterator(); iter.hasnext();) 

}

總結:

本文所說的方法:主要是先配置乙個後台定時任務掃瞄資料庫,採用另乙個定時任務以配置的時間間隔呼叫具體的方法達到動態配置定時任務的效果。

主要缺點如下:

1必須先配置乙個後台定時任務。

2具體類實現抽象類,乙個具體類一次只能配置乙個定時任務,可以多次配置。也就是說定時任務的方法是固定的。

quartz定時任務配置

參考 quartz是乙個強大的企業級任務排程框架,spring中繼承並簡化了quartz,下面就看看在spring中怎樣配置quartz 首先我們來寫乙個被排程的類 package com.kay.quartz public class quartzjob spring的配置檔案 work 10,1...

quartz定時任務 Spring配置

pom依賴 org.quartz scheduler quartz org.slf4j slf4j api 2.2.1 spring quartz job.xml 配置 org.quartz.simpl.threadpool55 其中 autoexclutejobtask 是定時任務執行方法 aut...

quartz定時任務

此檔案被包含在spring配置檔案中,其中 引數 的值遵循如下規則 0 0 12 每天中午12點觸發 0 15 10 每天上午10 15觸發 0 15 10 每天上午10 15觸發 0 15 10 每天上午10 15觸發 0 15 10 2005 2005年的每天上午10 15觸發 0 14 在每天...