Grails Quartz外掛程式 定時排程任務

2021-08-03 02:14:32 字數 2741 閱讀 4324

quartz外掛程式可以使grails應用程式按照指定的時間間隔或cron表示式來執行排程任務。grails系統通過spring配置使用quartz enterprise job scheduler 實現,但是編碼時按照規約可以很容易的實現。

grails-quartz 0.4.1是當前穩定版本。grails-quartz 0.4.2是最新正在開發的版本。(已經發布了)

1 外掛程式安裝

在應用資料夾路徑下鍵入以下命令

grails install-plugin quartz

如果以上命令由於某種原因不行,試一下下面這個

grails install-plugin

2  用法

排程任務(scheduling jobs)

class myjob

def group = "mygroup"

def execute()

}上述例子會等待1分鐘後每秒呼叫execute方法一次。'repeatinterval' 和'startdelay'屬性的單位是毫秒,值必須是int或long。如果這兩個屬性不指定,則使用預設值(repeatinterval為1分鐘,startdelay為30秒)

jobs預設情況下在test環境不執行。

排程cron任務(scheduling a cron job)

可以使用cron表示式排程任務。

class myjob 

def group = "mygroup"

def execute()

}組合觸發器任務

可以使用組合觸發器排程任務。

class myjob def execute() 

}

上面這個例子中,scheduler(排程器)啟動10秒後,job會每隔30秒執行一次,一共執行11次(******trigger);在15點時每6秒執行一次(15:00:00, 15:00:06, 15:00:12, … — 這個由'crontrigger'配置的),自定義的觸發器觸發時執行。

三種觸發器可以支援的引數如下

cron:

custom:

動態任務排程(dynamic jobs scheduling)

從0.4.1版本開始,可以使用動態排程任務。

可以使用以下方法:

每個方法都帶有乙個可選的『params』引數。可以用它傳遞資料。

class myjob 

…}// 在controller (或 service, 或其他地方):

myjob.triggernow([foo:"it works!"

])依賴注入和jobs(dependency injection and jobs)

jobs被配置為按名稱自動繫結(auto-wiring by name),屬性可以注入到jobs裡。為獲取data source可以宣告

def datasource

或者乙個service類

def myservice

使用jobexecutioncontext(using jobexecutioncontext)從0.3.2開始,你可以定義在job中這樣定義execute方法def execute(context){},這由quartz'sjobexecutioncontext提供。

如通過context.getmergedjobdatamap()提供一些引數給job一樣,你可以從context中獲取某些資訊(觸發器名稱,上次執行時間

,下次執行時間等)。如果你的job是有狀態的(看下面的併發一節),jobexecutioncontext中的job資料在每次執行job時也會持久化。

配置外掛程式(configuring the plugin)

config.groovy相同

。在命令列鍵入'grails install-quartz-config',可以獲得乙個初始的quartz配置檔案。檔案內容大致如下:

quartz

environments }}

目前支援的選項:
還可以建立quartz排程器提供不同的選項(參考quartz configuration reference).

日誌(logging)

hibernate會話和任務(hibernate sessions and jobs)

預設配置每次job執行時繫結乙個hibernate會話。當你要open session或者domain類持久化操作時這是必須的。

如果你不使用,可以使用 'sessionrequired' 屬性過載這個行為。

def sessionrequired = false

配置併發執行(configuring concurrent execution)

預設jobs可以併發執行,因此即使前乙個同樣的任務正在執行,乙個新的任務也可以建立並執行。如果想過載這種行為,可以使用'concurrent' 屬性

def concurrent = false

Grails Quartz外掛程式 定時排程任務

quartz外掛程式可以使grails應用程式按照指定的時間間隔或cron表示式來執行排程任務。grails系統通過spring配置使用quartz enterprise job scheduler 實現,但是編碼時按照規約可以很容易的實現。grails quartz 0.4.1是當前穩定版本。gr...

淡定,淡定,淡定

我的思緒過分調皮,有時候有個靈感覺得挺好還沒來得及記下來就又去想別的事情了,真不知道自己是怎麼回事。有時候糾結一件事情,是因為不知道如何選擇下面的行動,通常我看到乙個問題後都會冒出a b c三種選擇,如果其中乙個優勢特別顯著還好要是勢力相當就玩完了,我就會很矛盾很糾結,通常是先往東在往西或許還要來回...

Jmeter使用GUI壓測所用到的外掛程式 定時器等

2 當要壓測的介面需要傳入上一介面返回的資料時,壓測只壓測乙個介面,怎麼辦?我是將他們放到不同的執行緒組中,這樣壓測只壓測其中乙個執行緒組的就好了。當然還有其他的辦法,只是我個人覺得這樣最方便,還可以加多個執行緒組,其他執行緒組都可以單獨壓測,也可以共用第乙個執行緒組的返回資料 如上圖 我將toke...