日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

[译]课程 9: 作业存储

發布時間:2025/7/14 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [译]课程 9: 作业存储 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

譯者注: 這里是原文 Lesson 9: JobStores

作業存儲負責跟蹤你提供給調度程序的所有 "工作數據": 作業, 觸發器, 日歷, 等. 給調度程序選擇一個合適的 IJobStore 實現是非常重要的一步. 幸運的是, 一旦你理解了她們之間的區別選擇是非常容易的. 你可以在你提供給調度工廠的屬性文件 (或對象) 中聲明調度程序應該使用哪個 JobStore (以及存儲配置) 以便生成調度程序實例.

切勿在代碼中直接使用 JobStore 實例. 出于某些原因許多人試圖這樣做. JobStore 用于 Quartz 本身的幕后使用. 你必須告訴 Quartz (通過配置) 使用哪個 JobStore. 但是在你的代碼中你應該只使用 Scheduler 接口.

RAMJobStore

RAMJobStore 是最簡單的 JobStore, 也是性能最好的 (就 CPU 時間而言). 顧名思義: RAMJobStore 把所有數據保存到 RAM 中. 這也是她閃電般快速, 以及配置如此簡單的原因. 缺點是當你的應用程序結束 (或崩潰) 時所有調度信息會丟失 - 這意味著 RAMJobStore 無法遵守對作業和觸發器的 "非易失性" 設置. 對于某些應用程序而言這是可以接受的 - 亦或就是所需的行為, 但是對于其他應用程序而言, 這可能是災難.

配置 Quartz 使用 RAMJobStore

quartz.jobStore.type = Quartz.Simpl.RAMJobStore, Quartz

要使用 RAMJobStore (并假設你使用了 StdSchedulerFactory) 你不需要做任何特殊的事情. Quartz.NET 使用 RAMJobStore 作為 JobStore 實現的默認配置.

ADO.NET Job Store (AdoJobStore)

AdoJobStore 的命名也很巧妙 - 她通過 ADO.NET 將所有數據保存到數據庫中. 因此配置會比 RAMJobStore 復雜一些, 也沒那么快速. 但是, 性能退化的也沒那么嚴重, 尤其是當你構建數據表并在主鍵上使用了索引.

要使用 AdoJobStore, 您必須先創建一組數據表以供 Quartz.NET 使用. 您可以在 Quartz.NET 發布的 "database/dbtables" 目錄下找到表創建 SQL 腳本. 如果沒有您需要的數據庫類型的腳本, 只需要查看一個現有的腳本, 并以您數據庫所需的方式進行修改調整. 需要注意的一點是在這些腳本中, 所有表都以前綴 "QRTZ_" 開頭 (例如表 “QRTZ_TRIGGERS”, 和 “QRTZ_JOB_DETAIL”). 這個前綴實際上可以是您想要的任何東西, 只要您告知 Quartz.NET 這個前綴是什么 (在您的 Quartz.NET 屬性中). 對于同一數據庫, 多個調度程序實例, 使用不同前綴可能對創建多組表很有用.

目前作業存儲內部實現的唯一選項是 JobStoreTX 她自己創建事務. 這跟還可以使用 J2EE 容器托管事務的 JobStoreCMT 的 Java 版本的 Quart 不同.

最后一個難題是建立一個數據源以便 AdoJobStore 可以從中獲取您數據庫的鏈接. 數據源定義在您的 Quartz.NET 屬性中. 數據源信息包含了連接字符串以及 ADO.NET 委托信息.

配置 Quartz 使用 JobStoreTX

quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz

接下來, 您需要選擇一個 IDriverDelegate 實現以供 JobStore 使用. DriverDelegate 負責執行特定數據庫可能需要的任何 ADO.NET 工作. SdtAdoDelegate 是一個使用 "普通" ADO.NET 代碼 (就是 SQL 語句) 來工作的委托. 如果沒有為您數據庫專門創建的委托, 請嘗試使用這個委托 - 特定委托通常具有更好的性能或解決數據庫特定問題的方案. 其他委托可以在 "Quartz.Impl.AdoJobStore" 命名空間, 或在其他子命名空間中找到.

注意: Quartz.NET 會發出警告如果您使用默認的 StdAdoDelegate 做為委托時存在性能不足當您有選多選擇器以供選擇時. 特殊的委托有特殊的 SQL 來限制結果集長度 (SQLServerDelegate 使用 TOP n, PostgreSQLDelegate LIMIT n, OracleDelegate ROWCOUNT() <= n 等.).

一旦您選擇了委托, 應該將其類名做為委托值以供 AdoJobStore 使用.

配置 AdoJobStore 使用驅動器委托

quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz

接下來, 你需要告知 JobStore 你正在使用的表前綴是什么 (前面提到過).

配置 AdoJobStore 使用表前綴

quartz.jobStore.tablePrefix = QRTZ_

最后, 你需要設置 JobStore 應該使用哪個數據源. 數據源的命名也必須定義在您的 Quartz.NET 屬性中. 在這種情況下, 我們指定 Quartz 應該使用的數據源名稱為 "myDS" (在配置屬性的其他地方定義).

配置 AdoJobStore 使用的數據源名稱

quartz.jobStore.dataSource = myDS

One last thing that is needed for the configuration is to set data source connection string information and database provider. Connection string is the standard ADO.NET connection which is driver specific. Database provider is an abstraction of database drivers to create loose coupling between database drivers and Quartz.

設置數據源連接字符串和數據庫提供器

quartz.dataSource.myDS.connectionString = Server=localhost;Database=quartz;Uid=quartznet;Pwd=quartznetquartz.dataSource.myDS.provider = MySql

目前支持一下數據庫提供器:

  • SqlServer - SQL Server driver for .NET Framework 2.0
  • OracleODP - Oracle’s Oracle Driver
  • OracleODPManaged - Oracle’s managed driver for Oracle 11
  • MySql - MySQL Connector/.NET
  • SQLite - SQLite ADO.NET Provider
  • SQLite-Microsoft - Microsoft SQLite ADO.NET Provider
  • Firebird - Firebird ADO.NET Provider
  • Npgsql - PostgreSQL Npgsql

您可以也應該使用最新版本的驅動程序如果新的可用, 只需創建一個程序集綁定重定向

如果您的調度程序非常繁忙 (即幾乎總是執行與線程池大小相同的作業數), 那么您可能應該將數據源中的連接數設置為線程池大小 + 1. 這通常在 ADO.NET 連接字符串中配置 - 詳情請參閱您的驅動程序實現.

可以將 "quartz.jobStore.useProperties" 配置參數設置為 "true" (默認為 false) 來指定 AdoJobStore JobDataMaps 的所有值為字符串. 因此可以做為 名稱-值對來存儲, 而不是將更復雜的對象以序列化的形式存儲在 BLOB 列中. 從長遠來看, 您可以規避將非-字符類序列化為 BLOB 時出現的類版本問題.

配置 AdoJobStore 使用字符串做為 JobDataMap 的值 (建議)

quartz.jobStore.useProperties = true

轉載于:https://www.cnblogs.com/taadis/p/quartz-3-x-tutorial-job-stores.html

總結

以上是生活随笔為你收集整理的[译]课程 9: 作业存储的全部內容,希望文章能夠幫你解決所遇到的問題。

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