日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Quartz简介,java编程思想第四版pdf百度云

發布時間:2024/1/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Quartz简介,java编程思想第四版pdf百度云 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Quartz是免費使用的,并根據Apache 2.0許可獲得許可。

Quartz 是 OpenSymphony 開源組織在任務調度領域的一個開源項目,完全基于 Java 實現。該項目于 2009 年被 Terracotta 收購,目前是 Terracotta 旗下的一個項目。官網地址:http://www.quartz-scheduler.org/

使用場景

  • 持久性任務 - 就是保持調度定時的狀態;

  • 任務管理 - 對調度任務進行有效的管理;

當遇到以下問題時:

  • 自動關閉30分鐘未支付的訂單

  • 與第三方公司對賬業務

  • 數據統計,比如博客系統統計日粉絲數,日閱讀量等

  • 活動開始和結束通知;

  • 想在每月25號,自動還款;

  • 每周或者每月的提醒事項,比如周總結或者月總結;

像這種某個時間點執行任務,或者每隔一段時間重復執行任務,都可以用Quartz實現

特點

  • 強大的調度功能,例如豐富多樣的調度方法,可以滿足各種常規和特殊需求;

  • 靈活的應用方式,例如支持任務調度和任務的多種組合,支持調度數據的多種存儲方式(DB,RAM等);

  • 支持分布式集群,在被Terracotta收購之后,在原來基礎上進行了進一步的改造。

Quartz 使用的設計模式

  • Builder模式

  • 組件模式

  • Factory模式

Java 語言實現定時任務的幾種方式


  • java.util.Timer:一個 JDK 中自帶的處理簡單定時任務的工具。

  • java.util.concurrent.ScheduledExecutorService:JDK 中的定時任務接口,可以將定時任務與線程池功能結合使用。

  • org.springframework.scheduling.annotation.Scheduled:Spring 框架中基于注解來實現定時任務處理。

  • Quartz:一個完全由 Java 語言編寫的,支持分布式調度任務的開源框架。

核心元素


Quartz任務調度的核心元素主要有:Scheduler任務調度器、Trigger觸發器、Job任務、JobDetail調度程序。其中trigger和job、jobDetail為任務調度的元數據,而Scheduler為實際執行調度的控制器。

Scheduler

任務調度器,一個調度容器中可以注冊多個JobDetail和Trigger。當Trigger與JobDetail組合,就可以被Scheduler容器調度了。正常情況下一個應用只需要一個Scheduler對象。

Scheduler 由 SchedulerFactory 創建:DirectSchedulerFactory或者StdSchedulerFactory。第二種工廠StdSchedulerFactory使用較多,因為DirectSchedulerFactory使用起來不夠方便,需要作許多詳細的手工編碼設置。Scheduler主要有三種:RemoteMBeanScheduler,RemoteScheduler和StdScheduler。

Trigger

觸發器,調度任務的時間規則。Quartz中主要提供了四種類型的Trigger:SimpleTrigger,CronTirgger,DateIntervalTrigger,和NthIncludedDayTrigger。這四種trigger可以滿足企業應用中的絕大部分需求。

Calendar

一些日歷特定時間點的集合。一個trigger可以包含多個Calendar,以便排除或包含某些時間點。

JobDetail

JobDetail是一個具體的可執行的調度程序,Job是這個可執行調度程序所要執行的內容,另外JobDetail還包含了任務調度的方案和策略。

JobDetail綁定指定的Job,每次Scheduler調度執行一個Job的時候,首先會拿到對應的Job,然后創建該Job實例,再去執行Job中的execute()的內容,任務執行結束后,關聯的Job對象實例會被釋放,且會被JVM GC清除。

為什么設計成JobDetail + Job,不直接使用Job

JobDetail定義的是任務數據,而真正的執行邏輯是在Job中。

這是因為任務是有可能并發執行,如果Scheduler直接使用Job,就會存在對同一個Job實例并發訪問的問題。而 JobDetail 綁定 Job 方式,Sheduler每次執行,都會根據JobDetail創建一個新的Job實例,這樣就可以規避并發訪問的問題。

Job

任務,表示要執行的具體工作或者被調度的任務。我們的任務類實現該接口,重寫execute方法來定義任務的執行邏輯。主要有兩種類型的job:無狀態的(stateless)和有狀態的(stateful)。對于同一個trigger來說,有狀態的job不能被并行執行,只有上一次觸發的任務被執行完之后,才能觸發下一次執行。Job主要有兩種屬性:volatility和durability,其中volatility表示任務是否被持久化到數據庫存儲,而durability表示在沒有trigger關聯的時候任務是否被保留。兩者都是在值為true的時候任務被持久化或保留。一個job可以被多個trigger關聯,但是一個trigger只能關聯一個job。

JobExecutionContext

JobExecutionContext中包含了Quartz運行時的環境以及Job本身的詳細數據信息。

當Schedule調度執行一個Job的時候,就會將JobExecutionContext傳遞給該Job的execute()中,Job就可以通過JobExecutionContext對象獲取信息。

核心元素之間的關系


Quartz 類圖


主要線程


在Quartz中,有兩類線程,也即執行線程和調度線程,其中執行任務的線程通常用一個線程池維護。線程間關系如下圖

在quartz中,Scheduler調度線程主要有兩個:regular Scheduler Thread(執行常規調度)和Misfire Scheduler Thread(執行錯失的任務)。其中Regular Thread 輪詢Trigger,如果有將要觸發的Trigger,則從任務線程池中獲取一個空閑線程,然后執行與Trigg

《一線大廠Java面試題解析+后端開發學習筆記+最新架構講解視頻+實戰項目源碼講義》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整內容開源分享

er關聯的job;Misfire Thraed則是掃描所有的trigger,查看是否有錯失的,如果有的話,根據一定的策略進行處理。

數據存儲


Quartz中的trigger和job需要存儲下來才能被使用。Quartz中有兩種存儲方式:RAMJobStore,JobStoreSupport,其中RAMJobStore是將trigger和job存儲在內存中,而JobStoreSupport是基于jdbc將trigger和job存儲到數據庫中。RAMJobStore的存取速度非常快,但是由于其在系統被停止后所有的數據都會丟失,所以在集群應用中,必須使用JobStoreSupport。

注意:quartz集群是通過數據庫表來感知其他的應用的,各個節點之間并沒有直接的通信。只有使用持久的JobStore才能完成Quartz集群。

quartz的sql所在位置

1、/docs/dbTables

2、org/quartz/impl/jdbcjobstore

其中表結構

總結

以上是生活随笔為你收集整理的Quartz简介,java编程思想第四版pdf百度云的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。