成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【Java定時(shí)任務(wù)調(diào)度工具】Quartz

Render / 2420人閱讀

摘要:例如在周上設(shè)置表示周一三五觸發(fā)用于遞增觸發(fā)。例如在周上設(shè)置,表示本月的最后一個(gè)星期五表示離指定日期最近那個(gè)工作日周一至周五,例如在日字段上設(shè)置,表示離每月號(hào)最近的那個(gè)工作日觸發(fā)。相關(guān)例子代碼較簡(jiǎn)單的定時(shí)任務(wù)調(diào)度工具利用集成

筆記來源:IMOOC Java Quartz
Quartz 簡(jiǎn)介

OpenSymphony 提供的強(qiáng)大的開源任務(wù)調(diào)度框架

純 Java 實(shí)現(xiàn),精細(xì)控制排程

Quartz 特點(diǎn)

強(qiáng)大的調(diào)度功能

靈活的應(yīng)用方式

分布式和集群能力

主要用到的設(shè)計(jì)模式

Builder 模式

Factory 模式

組件模式

鏈?zhǔn)綄懛?/p>

Quartz 三個(gè)核心概念

調(diào)度器

任務(wù)

觸發(fā)器

Quartz 體系結(jié)構(gòu)

重要組成

Job

JobDetail

JobBuilder

JobStore

Trigger

SimpleTrigger

CronTrigger

TriggerBuilder

ThreadPool

Scheduler

Calendar

一個(gè)Trigger 可以和多個(gè)Calendar 關(guān)聯(lián),以排除或包含某些時(shí)間點(diǎn)

監(jiān)聽器

JobListener

TriggerListener

SchedulerListener

淺談 Job

Job 定義:實(shí)現(xiàn)業(yè)務(wù)邏輯的任務(wù)接口

Job 接口非常容易實(shí)現(xiàn),只有一個(gè) execute 方法,類似 TimerTaskrun 方法,在里面編寫業(yè)務(wù)邏輯

package org.quartz;
public interface Job {
    void execute(JobExecutionContext context) throws JobExecutionException;
}

Job 實(shí)例在 Quartz 中的生命周期

每次調(diào)度器執(zhí)行 job 時(shí),它在調(diào)用 execute 方法前會(huì)創(chuàng)建一個(gè)新的 job 實(shí)例

當(dāng)調(diào)用完成后,關(guān)聯(lián)的 job 對(duì)象實(shí)例會(huì)被釋放,釋放的實(shí)例會(huì)被垃圾回收機(jī)制回收

淺談 JobDetail

JobDetail 為 Job 實(shí)例提供了許多設(shè)置屬性,以及 JobDataMap 成員變量屬性,它用來存儲(chǔ)特定 Job 實(shí)例的狀態(tài)信息,調(diào)度器需要借助 JobDetail 對(duì)象來添加 Job 實(shí)例。

重要屬性

name

group

jobClass

jobDataMap

淺談 JobExecutionContext

當(dāng) Scheduler 調(diào)用一個(gè) Job,就會(huì)將 JobExecutionContext 傳遞給 Job 的 execute() 方法;

Job 能通過 JobExecutionContext 對(duì)象訪問到 Quartz 運(yùn)行時(shí)候的環(huán)境以及 Job 本身的明細(xì)數(shù)據(jù)。

淺談 JobDataMap

在進(jìn)行任務(wù)調(diào)度時(shí) JobDataMap 存儲(chǔ)在 JobExecutionContext 中,非常方便獲取。

JobDataMap 可以用來裝載任何可序列化的數(shù)據(jù)對(duì)象,當(dāng) job 實(shí)例對(duì)象被執(zhí)行時(shí)這些參數(shù)對(duì)象會(huì)傳遞給它。

JobDataMap 實(shí)現(xiàn)了JDK的Map接口,并添加了一些非常方便的方法用來存取基本數(shù)據(jù)類型。

獲取 JobDataMap 的兩種方式

從 Map 中直接獲取

Job 實(shí)現(xiàn)類中添加 setter 方法對(duì)應(yīng) JobDataMap 的鍵值(Quartz 框架默認(rèn)的 JobFactory 實(shí)現(xiàn)類在初始化 job 實(shí)例對(duì)象時(shí)會(huì)自動(dòng)地調(diào)用這些 setter 方法)

淺談 Trigger

Quartz 中的觸發(fā)器用來告訴調(diào)度程序作業(yè)什么時(shí)候觸發(fā)。即 Trigger 對(duì)象是用來觸發(fā)執(zhí)行 Job 的。

觸發(fā)器通用屬性

JobKey:表示 job 實(shí)例的標(biāo)識(shí),觸發(fā)器被觸發(fā)時(shí),該指定的 job 實(shí)例會(huì)執(zhí)行。

StartTime:表示觸發(fā)器的時(shí)間表首次被觸發(fā)的時(shí)間。它的值類型是 java.util.Date。

EndTime:指定觸發(fā)器的不再被觸發(fā)的時(shí)間。

SimpleTrigger

在一個(gè)指定時(shí)間段內(nèi)執(zhí)行一次作業(yè)任務(wù),或是在指定的時(shí)間間隔內(nèi)多次執(zhí)行作業(yè)任務(wù)。

withRepeatCount 重復(fù)次數(shù)可以是 0正整數(shù)或是 SimppleTrigger.REPEAT_INDEFINITELY 常量值。

withIntervalInSeconds 等重復(fù)執(zhí)行間隔必須為 0長整數(shù)

一旦被指定了 endTime 參數(shù),那么它會(huì)覆蓋重復(fù)次數(shù)參數(shù)的效果

CronTrigger

CronTrigger 的作用:基于日歷作業(yè)調(diào)度器,而不是像 SimpleTrigger 那樣精確指定間隔時(shí)間,比SimpleTrigger 更常用。

Cron 表達(dá)式

用于配置 CronTrigger 實(shí)例;

是由7個(gè)表達(dá)式組成的字符串,描述了時(shí)間表的詳細(xì)信息;

格式:[秒] [分] [時(shí)] [日] [月] [周] [年]

Cron 特殊字符
字段 是否必填 允許值 允許特殊字符
0~59 , - * /
0~59 , - * /
時(shí) 0~23 , - * /
1~31 , - * ? / L W C
1~12 或 JAN~DEC , - * /
1~7 或 SUN~SAT , - * ? / L C #
empty 1970~2099 , - * /
Cron 表達(dá)式舉例
表達(dá)式 含義
0 15 10 ? 每天10點(diǎn)15分觸發(fā)
0 0/5 14 ? 每天下午2點(diǎn)到2點(diǎn)59分(整點(diǎn)開始,每隔5分鐘觸發(fā))
0 15 10 ? * MON-FRI 從周一到周五每天上午的10點(diǎn)15分觸發(fā)
0 15 10 ? * 6#3 每月的第三周的星期五開始觸發(fā)
0 15 10 ? 6L 2018-2019 從2018年到2019年每月最后一周的星期五10點(diǎn)15分觸發(fā)
0/5 14,18 * ? 每天14:00:00~14:59:55、18:00:00~18:59:55,每5秒觸發(fā)一次
Cron 通配符說明
特殊字符 含義
* 表示所有值。例如:在[分]的字段上設(shè)置 *,表示每一分鐘都會(huì)觸發(fā)
? 表示不指定值。使用的場(chǎng)景為不需要關(guān)系當(dāng)前設(shè)置這個(gè)字段的值。例如:要在每月的10號(hào)觸發(fā)一次,但不關(guān)心是周幾,所有需要將[周]設(shè)置為 ?,具體設(shè)置為 0 0 0 10 * ?
- 表示區(qū)間。例如:在[時(shí)]上設(shè)置 10-12,表示10、11、12點(diǎn)都會(huì)觸發(fā)
, 表示指定多個(gè)值。例如:在[周]上設(shè)置 MON,WED,FRI 表示周一、三、五觸發(fā)
/ 用于遞增觸發(fā)。例如:在[秒]上設(shè)置 5/15 表示從5秒開始,每增15秒觸發(fā)(5、20、35、50)。又如在[月]上設(shè)置 1/3,表示每月1號(hào)開始,每隔三天觸發(fā)
L 表示最后的意思。在[日]字段上設(shè)置,表示當(dāng)月的最后一天;在[周]字段上表示星期六(7 或 SAT);如果在L前加上數(shù)字,則表示該數(shù)據(jù)的最后一個(gè)。例如在[周]上設(shè)置 6L,表示“本月的最后一個(gè)星期五”
W 表示離指定日期最近那個(gè)工作日(周一至周五),例如在[日]字段上設(shè)置 15W,表示離每月15號(hào)最近的那個(gè)工作日觸發(fā)。日光指定格式為 1W,則表示每月1號(hào)往后最近的工作日觸發(fā)。(W前只能設(shè)置具體的數(shù)字,不允許區(qū)間-)
# +序號(hào)(表示每月的第幾個(gè)周幾),例如在[周]字段上設(shè)置 6#3 表示在每月的第三個(gè)周六,注意如果指定 #5,正好第五周沒有周六,則不會(huì)觸發(fā)該配置。(#用在母親節(jié)和父親節(jié)再適合不過了)

LW 可以組合使用

周字段英文字母不區(qū)分大小寫,即MON和mon相同

利用工具,在線生成

淺談 Schedule Scheduler - 工廠模式

所有的 Scheduler 實(shí)例應(yīng)該由 SchedulerFactory 來創(chuàng)建

SchedulerFactory - StdSchedulerFactory

SchedulerFactory - DirectSchedulerFactory

Scheduler 的創(chuàng)建方式
SchedulerFactory sfact = new StdSchedulerFactory();
Scheduler scheduler = sfact.getScheduler();

DirectSchedulerFactory factory = DirectSchedulerFactory.getInstance();
Scheduler scheduler = factory.getScheduler();
StdSchedulerFactory

使用一組參數(shù) Java.util.Properties 來創(chuàng)建和初始化 Quartz 調(diào)度器

配置參數(shù)一般存儲(chǔ)再 quartz.properties

調(diào)用 getScheduler 方法就能創(chuàng)建和初始化調(diào)度器對(duì)象

Scheduler 的主要函數(shù)

Date scheduleJob(JobDetail jobDetail, Trigger trigger)

返回此后第一次執(zhí)行的時(shí)間

void start() - 開始/繼續(xù)執(zhí)行

void standby() - 掛起

void shutdown()

shutdown(true) 表示等待所有正在執(zhí)行的 job 執(zhí)行完畢之后,再關(guān)閉 scheduler

shutdown(false)shutdown() 表示直接關(guān)閉 scheduler

quartz.properties 文檔的位置和加載順序

若項(xiàng)目無 quartz.properties,將會(huì)去 quartz.jar 包讀取默認(rèn) quartz.properties。

組成部分

調(diào)度器屬性

org.quartz.scheduler.instanceName 屬性用來區(qū)分調(diào)度器實(shí)例,可以按功能用途來給調(diào)度器起名。

org.quartz.scheduler.instanceId 屬性和前者一樣,也允許任何字符串,但這個(gè)值必須是在所有調(diào)度器實(shí)例中是唯一的,尤其是在一個(gè)集群當(dāng)中,作為集群的唯一key。假如你想 Quartz 幫你生成這個(gè)值的話,可以設(shè)置為 AUTO。

線程池屬性

org.quartz.threadPool.threadCount:指定線程數(shù),至少為1(無默認(rèn)值)(一般設(shè)置為1-100直接的整數(shù)合適)

org.quartz.threadPool.threadPriority:設(shè)置線程的優(yōu)先級(jí)(最大為java.lang.Thread.MAX_PRIORITY 10,最小為Thread.MIN_PRIORITY 1,默認(rèn)為5)

org.quartz.threadPool.class:線程池的實(shí)現(xiàn)類(一般使用 SimpleThreadPool 可滿足幾乎所有用戶的需求)

作業(yè)存儲(chǔ)設(shè)置

描述了在調(diào)度器實(shí)例的生命周期中,Job 和 Trigger 信息是如何被存儲(chǔ)的。

插件配置

滿足特定需求用到的 Quartz 插件的配置。

相關(guān)例子代碼:https://github.com/gcusky/lea...

較簡(jiǎn)單的 Java 定時(shí)任務(wù)調(diào)度工具:Timer

Akka 利用 Extension 集成 Quartz:akka-quartz-scheduler

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76422.html

相關(guān)文章

  • Java 定時(shí)任務(wù)系列(2)-Spring 定時(shí)任務(wù)的幾種實(shí)現(xiàn)

    本文來自網(wǎng)絡(luò)一些博客的整理(包括gong1208的博客 dary1715的博客) 1、簡(jiǎn)介 這個(gè)系列介紹Spring框架實(shí)現(xiàn)定時(shí)任務(wù)的兩種方式以及一些高級(jí)的用法,包括: 1、使用Quartz,這是一個(gè)功能比較強(qiáng)大的的調(diào)度器,可以讓你的程序在指定時(shí)間執(zhí)行,也可以按照某一個(gè)頻度執(zhí)行,配置起來稍顯復(fù)雜,稍后會(huì)詳細(xì)介紹。 2、Spring3.0以后自帶的task,可以將它看成一個(gè)輕量級(jí)的Quartz,而且...

    roadtogeek 評(píng)論0 收藏0
  • SpringBoot下使用定時(shí)任務(wù)的方式全揭秘

    摘要:定時(shí)任務(wù)間隔時(shí)間方式執(zhí)行一次定時(shí)任務(wù)線程休眠規(guī)定時(shí)間類類允許調(diào)度一個(gè)任務(wù)。引入依賴配置測(cè)試執(zhí)行一次定時(shí)任務(wù)使用注解是為定時(shí)任務(wù)而生的一個(gè)注解,查看注解的源碼表達(dá)式接收一個(gè)。 本文旨在用通俗的語言講述枯燥的知識(shí) 定時(shí)任務(wù)作為一種系統(tǒng)調(diào)度工具,在一些需要有定時(shí)作業(yè)的系統(tǒng)中應(yīng)用廣泛,如每逢某個(gè)時(shí)間點(diǎn)統(tǒng)計(jì)數(shù)據(jù)、在將來某個(gè)時(shí)刻執(zhí)行某些動(dòng)作...定時(shí)任務(wù)在主流開發(fā)語言均提供相應(yīng)的API供開發(fā)者調(diào)用...

    DevTTL 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Java定時(shí)任務(wù)調(diào)度工具詳解之Quartz篇》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期一說明本文部分內(nèi)容均來自慕課網(wǎng)。屬性任務(wù)名稱任務(wù)所屬組任務(wù)實(shí)現(xiàn)類傳參的作用淺談上是什么當(dāng)調(diào)用一個(gè),就會(huì)將傳遞給的方法能通過對(duì)象訪問到運(yùn)行時(shí)候的環(huán)境以及本身的明細(xì)數(shù)據(jù)。 時(shí)間:2017年06月26日星期一說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼...

    hiYoHoo 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Java定時(shí)任務(wù)調(diào)度工具詳解之Timer篇》學(xué)習(xí)總結(jié)

    時(shí)間:2017年05月24日星期三說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:無個(gè)人學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 什么是定時(shí)任務(wù)調(diào)度 基于給定的時(shí)間點(diǎn),給定的時(shí)間間隔或者給定的執(zhí)行次數(shù)自動(dòng)執(zhí)行的任務(wù) 在Java中的定時(shí)調(diào)度工具 Timer:小弟,能實(shí)現(xiàn)日常60%的定...

    wind5o 評(píng)論0 收藏0
  • 那些年,我們追過的“定時(shí)調(diào)度

    摘要:類是一個(gè)抽象類,由安排為一次執(zhí)行或重復(fù)執(zhí)行的任務(wù)。也是自帶的一個(gè)基于線程池設(shè)計(jì)的定時(shí)任務(wù)類。問題,則可以直接使用類實(shí)現(xiàn)自定義的定時(shí)調(diào)度規(guī)則。 定時(shí)調(diào)度作為后端開發(fā)人員,我們總會(huì)遇到這樣的業(yè)務(wù)場(chǎng)景:每周同步一批數(shù)據(jù);每半個(gè)小時(shí)檢查一遍服務(wù)器運(yùn)行狀況;每天早上八點(diǎn)給用戶發(fā)送一份包含今日待辦事項(xiàng)的郵件,等等。 這些場(chǎng)景中都離不開定時(shí)器,就像一個(gè)定好時(shí)間規(guī)則的鬧鐘,它會(huì)在指定時(shí)間觸發(fā),執(zhí)行我們...

    The question 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<