[译]课程 9: 作业存储
譯者注: 這里是原文 Lesson 9: JobStores
作業(yè)存儲負責跟蹤你提供給調(diào)度程序的所有 "工作數(shù)據(jù)": 作業(yè), 觸發(fā)器, 日歷, 等. 給調(diào)度程序選擇一個合適的 IJobStore 實現(xiàn)是非常重要的一步. 幸運的是, 一旦你理解了她們之間的區(qū)別選擇是非常容易的. 你可以在你提供給調(diào)度工廠的屬性文件 (或?qū)ο? 中聲明調(diào)度程序應該使用哪個 JobStore (以及存儲配置) 以便生成調(diào)度程序?qū)嵗?
切勿在代碼中直接使用 JobStore 實例. 出于某些原因許多人試圖這樣做. JobStore 用于 Quartz 本身的幕后使用. 你必須告訴 Quartz (通過配置) 使用哪個 JobStore. 但是在你的代碼中你應該只使用 Scheduler 接口.
RAMJobStore
RAMJobStore 是最簡單的 JobStore, 也是性能最好的 (就 CPU 時間而言). 顧名思義: RAMJobStore 把所有數(shù)據(jù)保存到 RAM 中. 這也是她閃電般快速, 以及配置如此簡單的原因. 缺點是當你的應用程序結束 (或崩潰) 時所有調(diào)度信息會丟失 - 這意味著 RAMJobStore 無法遵守對作業(yè)和觸發(fā)器的 "非易失性" 設置. 對于某些應用程序而言這是可以接受的 - 亦或就是所需的行為, 但是對于其他應用程序而言, 這可能是災難.
配置 Quartz 使用 RAMJobStore
quartz.jobStore.type = Quartz.Simpl.RAMJobStore, Quartz要使用 RAMJobStore (并假設你使用了 StdSchedulerFactory) 你不需要做任何特殊的事情. Quartz.NET 使用 RAMJobStore 作為 JobStore 實現(xiàn)的默認配置.
ADO.NET Job Store (AdoJobStore)
AdoJobStore 的命名也很巧妙 - 她通過 ADO.NET 將所有數(shù)據(jù)保存到數(shù)據(jù)庫中. 因此配置會比 RAMJobStore 復雜一些, 也沒那么快速. 但是, 性能退化的也沒那么嚴重, 尤其是當你構建數(shù)據(jù)表并在主鍵上使用了索引.
要使用 AdoJobStore, 您必須先創(chuàng)建一組數(shù)據(jù)表以供 Quartz.NET 使用. 您可以在 Quartz.NET 發(fā)布的 "database/dbtables" 目錄下找到表創(chuàng)建 SQL 腳本. 如果沒有您需要的數(shù)據(jù)庫類型的腳本, 只需要查看一個現(xiàn)有的腳本, 并以您數(shù)據(jù)庫所需的方式進行修改調(diào)整. 需要注意的一點是在這些腳本中, 所有表都以前綴 "QRTZ_" 開頭 (例如表 “QRTZ_TRIGGERS”, 和 “QRTZ_JOB_DETAIL”). 這個前綴實際上可以是您想要的任何東西, 只要您告知 Quartz.NET 這個前綴是什么 (在您的 Quartz.NET 屬性中). 對于同一數(shù)據(jù)庫, 多個調(diào)度程序?qū)嵗? 使用不同前綴可能對創(chuàng)建多組表很有用.
目前作業(yè)存儲內(nèi)部實現(xiàn)的唯一選項是 JobStoreTX 她自己創(chuàng)建事務. 這跟還可以使用 J2EE 容器托管事務的 JobStoreCMT 的 Java 版本的 Quart 不同.
最后一個難題是建立一個數(shù)據(jù)源以便 AdoJobStore 可以從中獲取您數(shù)據(jù)庫的鏈接. 數(shù)據(jù)源定義在您的 Quartz.NET 屬性中. 數(shù)據(jù)源信息包含了連接字符串以及 ADO.NET 委托信息.
配置 Quartz 使用 JobStoreTX
quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz接下來, 您需要選擇一個 IDriverDelegate 實現(xiàn)以供 JobStore 使用. DriverDelegate 負責執(zhí)行特定數(shù)據(jù)庫可能需要的任何 ADO.NET 工作. SdtAdoDelegate 是一個使用 "普通" ADO.NET 代碼 (就是 SQL 語句) 來工作的委托. 如果沒有為您數(shù)據(jù)庫專門創(chuàng)建的委托, 請嘗試使用這個委托 - 特定委托通常具有更好的性能或解決數(shù)據(jù)庫特定問題的方案. 其他委托可以在 "Quartz.Impl.AdoJobStore" 命名空間, 或在其他子命名空間中找到.
注意: Quartz.NET 會發(fā)出警告如果您使用默認的 StdAdoDelegate 做為委托時存在性能不足當您有選多選擇器以供選擇時. 特殊的委托有特殊的 SQL 來限制結果集長度 (SQLServerDelegate 使用 TOP n, PostgreSQLDelegate LIMIT n, OracleDelegate ROWCOUNT() <= n 等.).
一旦您選擇了委托, 應該將其類名做為委托值以供 AdoJobStore 使用.
配置 AdoJobStore 使用驅(qū)動器委托
quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz接下來, 你需要告知 JobStore 你正在使用的表前綴是什么 (前面提到過).
配置 AdoJobStore 使用表前綴
quartz.jobStore.tablePrefix = QRTZ_最后, 你需要設置 JobStore 應該使用哪個數(shù)據(jù)源. 數(shù)據(jù)源的命名也必須定義在您的 Quartz.NET 屬性中. 在這種情況下, 我們指定 Quartz 應該使用的數(shù)據(jù)源名稱為 "myDS" (在配置屬性的其他地方定義).
配置 AdoJobStore 使用的數(shù)據(jù)源名稱
quartz.jobStore.dataSource = myDSOne 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.
設置數(shù)據(jù)源連接字符串和數(shù)據(jù)庫提供器
quartz.dataSource.myDS.connectionString = Server=localhost;Database=quartz;Uid=quartznet;Pwd=quartznetquartz.dataSource.myDS.provider = MySql目前支持一下數(shù)據(jù)庫提供器:
- 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
您可以也應該使用最新版本的驅(qū)動程序如果新的可用, 只需創(chuàng)建一個程序集綁定重定向
如果您的調(diào)度程序非常繁忙 (即幾乎總是執(zhí)行與線程池大小相同的作業(yè)數(shù)), 那么您可能應該將數(shù)據(jù)源中的連接數(shù)設置為線程池大小 + 1. 這通常在 ADO.NET 連接字符串中配置 - 詳情請參閱您的驅(qū)動程序?qū)崿F(xiàn).
可以將 "quartz.jobStore.useProperties" 配置參數(shù)設置為 "true" (默認為 false) 來指定 AdoJobStore JobDataMaps 的所有值為字符串. 因此可以做為 名稱-值對來存儲, 而不是將更復雜的對象以序列化的形式存儲在 BLOB 列中. 從長遠來看, 您可以規(guī)避將非-字符類序列化為 BLOB 時出現(xiàn)的類版本問題.
配置 AdoJobStore 使用字符串做為 JobDataMap 的值 (建議)
quartz.jobStore.useProperties = true轉(zhuǎn)載于:https://www.cnblogs.com/taadis/p/quartz-3-x-tutorial-job-stores.html
總結
以上是生活随笔為你收集整理的[译]课程 9: 作业存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Coding 地址
- 下一篇: 配置DispatcherServlet应