国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

Render / 2399人閱讀

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

筆記來源:IMOOC Java Quartz
Quartz 簡介

OpenSymphony 提供的強大的開源任務調(diào)度框架

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

Quartz 特點

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

靈活的應用方式

分布式和集群能力

主要用到的設計模式

Builder 模式

Factory 模式

組件模式

鏈式寫法

Quartz 三個核心概念

調(diào)度器

任務

觸發(fā)器

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

重要組成

Job

JobDetail

JobBuilder

JobStore

Trigger

SimpleTrigger

CronTrigger

TriggerBuilder

ThreadPool

Scheduler

Calendar

一個Trigger 可以和多個Calendar 關聯(lián),以排除或包含某些時間點

監(jiān)聽器

JobListener

TriggerListener

SchedulerListener

淺談 Job

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

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

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

Job 實例在 Quartz 中的生命周期

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

當調(diào)用完成后,關聯(lián)的 job 對象實例會被釋放,釋放的實例會被垃圾回收機制回收

淺談 JobDetail

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

重要屬性

name

group

jobClass

jobDataMap

淺談 JobExecutionContext

Scheduler 調(diào)用一個 Job,就會將 JobExecutionContext 傳遞給 Job 的 execute() 方法;

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

淺談 JobDataMap

在進行任務調(diào)度時 JobDataMap 存儲在 JobExecutionContext 中,非常方便獲取。

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

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

獲取 JobDataMap 的兩種方式

從 Map 中直接獲取

Job 實現(xiàn)類中添加 setter 方法對應 JobDataMap 的鍵值(Quartz 框架默認的 JobFactory 實現(xiàn)類在初始化 job 實例對象時會自動地調(diào)用這些 setter 方法)

淺談 Trigger

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

觸發(fā)器通用屬性

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

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

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

SimpleTrigger

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

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

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

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

CronTrigger

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

Cron 表達式

用于配置 CronTrigger 實例;

是由7個表達式組成的字符串,描述了時間表的詳細信息;

格式:[秒] [分] [時] [日] [月] [周] [年]

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

LW 可以組合使用

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

利用工具,在線生成

淺談 Schedule Scheduler - 工廠模式

所有的 Scheduler 實例應該由 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ù)一般存儲再 quartz.properties

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

Scheduler 的主要函數(shù)

Date scheduleJob(JobDetail jobDetail, Trigger trigger)

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

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

void standby() - 掛起

void shutdown()

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

shutdown(false)shutdown() 表示直接關閉 scheduler

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

若項目無 quartz.properties,將會去 quartz.jar 包讀取默認 quartz.properties

組成部分

調(diào)度器屬性

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

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

線程池屬性

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

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

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

作業(yè)存儲設置

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

插件配置

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

相關例子代碼:https://github.com/gcusky/lea...

較簡單的 Java 定時任務調(diào)度工具:Timer

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/76422.html

相關文章

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

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

    roadtogeek 評論0 收藏0
  • SpringBoot下使用定時任務的方式全揭秘

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

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

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

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

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

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

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

    The question 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<