小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Quartz.net官方開發(fā)指南 第九課: JobStore - 自由、創(chuàng)新、研究、探索 - 博客園

 唐伯龍 2011-04-11

Quartz.net官方開發(fā)指南 第九課: JobStore

JobStore負責保持對所有scheduler 工作數(shù)據(jù)追蹤,這些工作數(shù)據(jù)包括:job(任務),trigger(觸發(fā)器),calendar(日歷)等。為你的Quartz scheduler選擇合適的JobStore是非常重要的一步,幸運的是,如果你理解了不同的JobStore之間的差別,那么選擇就變得非常簡單。在提供產生scheduler 實例的SchedulerFactory的屬性文件中聲明scheduler所使用的JobStore(以及它的配置)。

注:不要在代碼中直接使用JobStore實例,處于某些原因,很多人試圖這么做。JobStore是由Quartz自身在幕后使用。你必須告訴(通過配置)Quartz使用哪個JobStore,而你只是在你的代碼中使用Scheduler接口完成工作。

RAMJobStore


RAMJobStore是最簡單的JobStore,也是性能最好的(根據(jù)CPU時間)。從名字就可以直觀地看出,RAMJobStore將所有的數(shù)據(jù)都保存在RAM中。這就是為什么它閃電般的快速和如此容易地配置。缺點就是當應用結束時所有的日程信息都會丟失,這意味著RAMJobStore不能滿足JobsTriggers的持久性(non-volatility)。對于有些應用來說,這是可以接受的,甚至是期望的行為。但是對于其他應用來說,這將是災難。

為了使用RAMJobStore(假設你使用DirectSchedulerFactory),指使簡單地將類名Quartz.Simpl.RAMJobStore作為你的quartz的配置值。

配置 Quartz 使用 RAMJobStore

<quartz>

         <add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz" />

</quartz>

這里沒有其他需要的擔心的配置。 Qiartz.net缺省使用的就是RAMJobStore.

ADO.NET Job Store (AdoJobStore)

基于ADO.NET job store 目前正在開發(fā)中,還存在很多的bug. 0.6版本開始

AdoJobStore基本上可以用了.

AdoJobStore的命名也非常得體,它將所有的數(shù)據(jù)通過ADO.NET保存到數(shù)據(jù)庫可中。它的配置要比RAMJobStore稍微復雜,同時速度也沒有那么快。但是性能的缺陷不是非常差,尤其是如果你在數(shù)據(jù)庫表的主鍵上建立索引。

AdoJobStore幾乎可以在任何數(shù)據(jù)庫上工作,它廣泛地使用Oracle, MySQL, MS SQLServer2000, HSQLDB, PostreSQL 以及 DB2。要使用AdoJobStore,首先必須創(chuàng)建一套Quartz使用的數(shù)據(jù)庫表,可以在Quartz database\tables找到創(chuàng)建庫表的SQL腳本。如果沒有找到你的數(shù)據(jù)庫類型的腳本,那么找到一個已有的,修改成為你數(shù)據(jù)庫所需要的。需要注意的一件事情就是所有Quartz庫表名都以QRTZ_作為前綴(例如:表"QRTZ_TRIGGERS","QRTZ_JOB_DETAIL")。實際上,可以你可以將前綴設置為任何你想要的前綴,只要你告訴AdoJobStore那個前綴是什么即可(在你的Quartz屬性文件中配置)。對于一個數(shù)據(jù)庫中使用多個scheduler實例,那么配置不同的前綴可以創(chuàng)建多套庫表,十分有用。

一旦數(shù)據(jù)庫表已經創(chuàng)建,在配置和啟動AdoJobStore之前,就需要作出一個更加重要的決策。你要決定在你的應用中需要什么類型的事務。如果不想將scheduling命令綁到其他的事務上,那么你可以通過對JobStore使用JobStoreTX來讓Quartz幫你管理事務(這是最普遍的選擇)。

最后的疑問就是如何建立獲得數(shù)據(jù)庫聯(lián)接的數(shù)據(jù)源(DataSource)。Quartz屬性中定義數(shù)據(jù)源是通過提供所有聯(lián)接數(shù)據(jù)庫的信息,讓Quartz自己創(chuàng)建和管理數(shù)據(jù)源。

要使用AdoJobStore(假定使用StdSchedulerFactory),首先需要設置Quartz配置中的quartz.jobStore.type屬性為Quartz.Impl.AdoJobStore.JobStoreTX, Quartz

配置 Quartz使用 JobStoreTx

quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz

下一步,需要為JobStore 選擇一個DriverDelegate , DriverDelegate負責做指定數(shù)據(jù)庫的所有ADO.NET工作。StdADO.NETDelegate是一個使用vanilla" ADO.NET代碼(以及SQL語句)來完成工作的代理。如果數(shù)據(jù)庫沒有其他指定的代理,那么就試用這個代理。只有當使用StdADO.NETDelegate發(fā)生問題時,我們才會使用數(shù)據(jù)庫特定的代理(這看起來非常樂觀。其他的代理可以在Quartz.Impl.AdoJobStor命名空間找到。)。其他的代理包括PostgreSQLDelegate ( 專為PostgreSQL 7.x)。

一旦選擇好了代理,就將它的名字設置給AdoJobStore

配置AdoJobStore 使用DriverDelegate

quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz

接下來,需要為JobStore指定所使用的數(shù)據(jù)庫表前綴(前面討論過)。

配置AdoJobStore的數(shù)據(jù)庫表前綴

quartz.jobStore.tablePrefix = QRTZ

然后需要設置JobStore所使用的數(shù)據(jù)源。必須在Quartz屬性中定義已命名的數(shù)據(jù)源,比如,我們指定Quartz使用名為"default"的數(shù)據(jù)源(在配置文件的其他地方定義)。

配置 AdoJobStore使用數(shù)據(jù)源源的名字

properties["quartz.jobStore.dataSource"] = "default"

   最后,需要配置數(shù)據(jù)源的使用的Ado.net數(shù)據(jù)提供者和數(shù)據(jù)庫連接串,數(shù)據(jù)庫連接串是標準的Ado.net 數(shù)據(jù)庫連接的連接串。數(shù)據(jù)庫提供者是關系數(shù)據(jù)庫同Quartz.net之間保持低耦合的數(shù)據(jù)庫的連接提供者。

配置AdoJobStore使用數(shù)據(jù)源源的數(shù)據(jù)庫連接串和數(shù)據(jù)庫提供者

quartz.dataSource.default.connectionString = Server=(local);Database=quartz;Trusted_Connection=True;

quartz.dataSource.default.provider= SqlServer-11

   目前Quartz.net支持的以下數(shù)據(jù)庫的數(shù)據(jù)提供者:

  • SqlServer-11 - SQL Server driver for .NET Framework 1.1
  • SqlServer-20 - SQL Server driver for .NET Framework 2.0
  • OracleClient-20 - Microsoft's Oracle Driver (comes bundled with .NET Framework)
  • OracleODP-20 - Oracle's Oracle Driver
  • MySql-10 - MySQL Connector/.NET v. 1.0.7
  • MySql-109 - MySQL Connector/.NET v. 1.0.9
  • MySql-50 - MySQL Connector/.NET v. 5.0 (.NET 2.0)
  • MySql-51 - MySQL Connector/:NET v. 5.1 (.NET 2.0)
  • SQLite1044 - SQLite ADO.NET 2.0 Provider v. 1.0.44 (.NET 2.0)

如果Scheduler非常忙(比如,執(zhí)行的任務數(shù)量差不多和線程池的數(shù)量相同,那么你需要正確地配置DataSource的連接數(shù)量為線程池數(shù)量。為了指示AdoJobStore所有的JobDataMaps中的值都是字符串,并且能以名字-對的方式存儲而不是以復雜對象的序列化形式存儲在BLOB字段中,應設置 quartz.jobStore.useProperties配置參數(shù)的值為"true"(這是缺省的方式)。這樣做,從長遠來看非常安全,這樣避免了對存儲在BLOB中的非字符串的序列化對象的類型轉換問題。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多