成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

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

Render / 2497人閱讀

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

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

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

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

Quartz 特點(diǎn)

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

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

分布式和集群能力

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

Builder 模式

Factory 模式

組件模式

鏈?zhǔn)綄?xiě)法

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)聽(tīng)器

JobListener

TriggerListener

SchedulerListener

淺談 Job

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

Job 接口非常容易實(shí)現(xiàn),只有一個(gè) execute 方法,類(lèi)似 TimerTaskrun 方法,在里面編寫(xiě)業(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 成員變量屬性,它用來(lái)存儲(chǔ)特定 Job 實(shí)例的狀態(tài)信息,調(diào)度器需要借助 JobDetail 對(duì)象來(lái)添加 Job 實(shí)例。

重要屬性

name

group

jobClass

jobDataMap

淺談 JobExecutionContext

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

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

淺談 JobDataMap

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

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

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

獲取 JobDataMap 的兩種方式

從 Map 中直接獲取

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

淺談 Trigger

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

觸發(fā)器通用屬性

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

StartTime:表示觸發(fā)器的時(shí)間表首次被觸發(fā)的時(shí)間。它的值類(lèi)型是 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長(zhǎng)整數(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)開(kāi)始,每隔5分鐘觸發(fā))
0 15 10 ? * MON-FRI 從周一到周五每天上午的10點(diǎn)15分觸發(fā)
0 15 10 ? * 6#3 每月的第三周的星期五開(kāi)始觸發(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 通配符說(shuō)明
特殊字符 含義
* 表示所有值。例如:在[分]的字段上設(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秒開(kāi)始,每增15秒觸發(fā)(5、20、35、50)。又如在[月]上設(shè)置 1/3,表示每月1號(hào)開(kāi)始,每隔三天觸發(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,正好第五周沒(méi)有周六,則不會(huì)觸發(fā)該配置。(#用在母親節(jié)和父親節(jié)再適合不過(guò)了)

LW 可以組合使用

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

利用工具,在線生成

淺談 Schedule Scheduler - 工廠模式

所有的 Scheduler 實(shí)例應(yīng)該由 SchedulerFactory 來(lái)創(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 來(lái)創(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() - 開(kāi)始/繼續(xù)執(zhí)行

void standby() - 掛起

void shutdown()

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

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

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

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

組成部分

調(diào)度器屬性

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

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

線程池屬性

org.quartz.threadPool.threadCount:指定線程數(shù),至少為1(無(wú)默認(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)類(lèi)(一般使用 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://m.hztianpu.com/yun/76422.html

相關(guān)文章

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

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

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

    摘要:時(shí)間年月日星期一說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。屬性任務(wù)名稱(chēng)任務(wù)所屬組任務(wù)實(shí)現(xiàn)類(lèi)傳參的作用淺談上是什么當(dāng)調(diào)用一個(gè),就會(huì)將傳遞給的方法能通過(guò)對(duì)象訪問(wèn)到運(yùn)行時(shí)候的環(huán)境以及本身的明細(xì)數(shù)據(jù)。 時(shí)間:2017年06月26日星期一說(shuō)明:本文部分內(nèi)容均來(lá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日星期三說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:無(wú)個(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
  • 那些年,我們追過(guò)的“定時(shí)調(diào)度

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

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

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

0條評(píng)論

閱讀需要支付1元查看
<