乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      淺析Quartz的集群配置(一)

       昵稱24706 2008-01-03

      1 基本信息

      摘要:Quartz是一個(gè)開源的作業(yè)調(diào)度框架,它完全由java寫成,并設(shè)計(jì)用于J2SE和J2EE應(yīng)用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執(zhí)行一個(gè)作業(yè)而創(chuàng)建簡單的或復(fù)雜的調(diào)度。它有很多特征,如:數(shù)據(jù)庫支持,集群,插件,EJB作業(yè)預(yù)構(gòu)建,JavaMail及其它,支持cron-like表達(dá)式等等。其中集群配置一般比較復(fù)雜,那么在Quartz中如何配置它的集群特性呢?

      作者:武玉厚

      查看本文第二部分:http://gocom./modules/newbb/forumtopic19180_9963_40.htm

      2 Quartz的集群配置

        Quartz是一個(gè)開源的作業(yè)調(diào)度框架,它完全由java寫成,并設(shè)計(jì)用于J2SE和J2EE應(yīng)用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執(zhí)行一個(gè)作業(yè)而創(chuàng)建簡單的或復(fù)雜的調(diào)度。它有很多特征,如:數(shù)據(jù)庫支持,集群,插件,EJB作業(yè)預(yù)構(gòu)建,JavaMail及其它,支持cron-like表達(dá)式等等。其中集群配置一般比較復(fù)雜,那么在Quartz中如何配置它的集群特性呢?

      2.1 實(shí)現(xiàn)集群的基本原理

        目前Quartz最新版本是1.6.0。Quartz是通過借助關(guān)系數(shù)據(jù)庫和JDBC作業(yè)存儲(chǔ)來實(shí)現(xiàn)集群管理的。


       
      1. 原理

        集群通過故障切換和負(fù)載平衡的功能,能給調(diào)度器帶來高可用性和伸縮性。目前集群只能工作在JDBC-Jobstore (JobStoreTX 或者JobStoreCMT)方式下,從本質(zhì)上來說,是使集群上的每一個(gè)節(jié)點(diǎn)通過共享同一個(gè)數(shù)據(jù)庫來工作的(Quartz通過啟動(dòng)兩個(gè)維護(hù)線程來維護(hù)數(shù)據(jù)庫狀態(tài)實(shí)現(xiàn)集群管理,一個(gè)是檢測節(jié)點(diǎn)狀態(tài)線程,一個(gè)是恢復(fù)任務(wù)線程)。

        負(fù)載平衡是自動(dòng)完成的,集群的每個(gè)節(jié)點(diǎn)會(huì)盡快觸發(fā)任務(wù)。當(dāng)一個(gè)觸發(fā)器的觸發(fā)時(shí)間到達(dá)時(shí),第一個(gè)節(jié)點(diǎn)將會(huì)獲得任務(wù)(通過鎖定),成為執(zhí)行任務(wù)的節(jié)點(diǎn)。

        故障切換的發(fā)生是在當(dāng)一個(gè)節(jié)點(diǎn)正在執(zhí)行一個(gè)或者多個(gè)任務(wù)失敗的時(shí)候。當(dāng)一個(gè)節(jié)點(diǎn)失敗了,其他的節(jié)點(diǎn)會(huì)檢測到并且標(biāo)識(shí)在失敗節(jié)點(diǎn)上正在進(jìn)行的數(shù)據(jù)庫中的任務(wù)。任何被標(biāo)記為可恢復(fù)(任務(wù)詳細(xì)信息的"requests recovery"屬性)的任務(wù)都會(huì)被其他的節(jié)點(diǎn)重新執(zhí)行。沒有標(biāo)記可恢復(fù)的任務(wù)只會(huì)被釋放出來,將會(huì)在下次相關(guān)觸發(fā)器觸發(fā)時(shí)執(zhí)行。

      2. 集群管理用到的表

      --任務(wù)詳細(xì)信息表

      1. CREATE TABLE qrtz_job_details
      2. (
      3. JOB_NAME VARCHAR2(80) NOT NULL,
      4. JOB_GROUP VARCHAR2(80) NOT NULL,
      5. DESCRIPTION VARCHAR2(120) NULL,
      6. JOB_CLASS_NAME VARCHAR2(128) NOT NULL,
      7. IS_DURABLE VARCHAR2(1) NOT NULL,
      8. IS_VOLATILE VARCHAR2(1) NOT NULL,
      9. IS_STATEFUL VARCHAR2(1) NOT NULL,
      10. REQUESTS_RECOVERY VARCHAR2(1) NOT NULL, --可恢復(fù)標(biāo)記
      11. JOB_DATA BLOB NULL,
      12. PRIMARY KEY (JOB_NAME,JOB_GROUP)
      13. );

      --觸發(fā)器與任務(wù)關(guān)聯(lián)表

      1. CREATE TABLE qrtz_fired_triggers
      2. (
      3. ENTRY_ID VARCHAR2(95) NOT NULL,
      4. TRIGGER_NAME VARCHAR2(80) NOT NULL,
      5. TRIGGER_GROUP VARCHAR2(80) NOT NULL,
      6. IS_VOLATILE VARCHAR2(1) NOT NULL,
      7. INSTANCE_NAME VARCHAR2(80) NOT NULL,
      8. FIRED_TIME NUMBER(13) NOT NULL,
      9. STATE VARCHAR2(16) NOT NULL,
      10. JOB_NAME VARCHAR2(80) NULL,
      11. JOB_GROUP VARCHAR2(80) NULL,
      12. IS_STATEFUL VARCHAR2(1) NULL,
      13. REQUESTS_RECOVERY VARCHAR2(1) NULL, --可恢復(fù)標(biāo)記
      14. PRIMARY KEY (ENTRY_ID)
      15. );

      --調(diào)度器狀態(tài)表

      1. TABLE qrtz_scheduler_state
      2. (
      3. INSTANCE_NAME VARCHAR2(80) NOT NULL, --調(diào)度器實(shí)例ID
      4. LAST_CHECKIN_TIME NUMBER(13) NOT NULL, --上次檢查時(shí)間
      5. CHECKIN_INTERVAL NUMBER(13) NOT NULL, --檢查時(shí)間間隔
      6. RECOVERER VARCHAR2(80) NULL, --恢復(fù)調(diào)度器
      7. PRIMARY KEY (INSTANCE_NAME)
      8. );

      2.2 集群配置

        通過設(shè)置"org.quartz.jobStore.isClustered"屬性為"true"來激活集群特性。在集群中的每一個(gè)實(shí)例都必須有一個(gè)唯一的"instance id" ("org.quartz.scheduler.instanceId" 屬性), 但是應(yīng)該有相同的"scheduler instance name" ("org.quartz.scheduler.instanceName"),也就是說集群中的每一個(gè)實(shí)例都必須使用相同的quartz.properties 配置文件。除了以下幾種例外,配置文件的內(nèi)容其他都必須相同:

       不同的線程池大小,
       不同的"org.quartz.scheduler.instanceId"屬性值(這個(gè)可以很容易做到,設(shè)定為"AUTO"即可)。
       注意: 永遠(yuǎn)不要在不同的機(jī)器上運(yùn)行集群,除非他們的時(shí)鐘是使用某種形式的同步服務(wù)(守護(hù))非常有規(guī)律的運(yùn)行(時(shí)鐘必須在一分一秒內(nèi))來達(dá)到同步。還有: 永遠(yuǎn)不要觸發(fā)一個(gè)非集群的實(shí)例,如果其他的實(shí)例正在同一個(gè)數(shù)據(jù)庫表上運(yùn)行。你將使你的數(shù)據(jù)嚴(yán)重腐蝕,出現(xiàn)非預(yù)期行為。
       示例及詳細(xì)配置說明,請參照附錄Quartz配置文件說明。

      3 附錄

      3.1 Quartz配置文件說明

      3.1.1 Quartz配置文件基本說明

        文件名稱:默認(rèn)文件名稱quartz.properties,可以通過更改系統(tǒng)屬性“org.quartz.properties”來加載自定義的配置。
        格式:屬性文件

      3.1.2 Quartz配置文件詳細(xì)說明

      3.1.2.1 Scheduler主要屬性的配置

       

      1. # Scheduler主要屬性的一般定義模式如下:
      2. #
      3. # org.quartz.scheduler.instanceName = SCHED_NAME
      4. # org.quartz.scheduler.instanceId = INSTANCE_ID
      5. # org.quartz.scheduler.threadName = THREAD_NAME
      6. # org.quartz.scheduler.rmi.export = false
      7. # org.quartz.scheduler.rmi.proxy = false
      8. # org.quartz.scheduler.rmi.registryHost = localhost
      9. # org.quartz.scheduler.rmi.registryPort = 1099
      10. # org.quartz.scheduler.rmi.createRegistry = never
      11. # org.quartz.scheduler.userTransactionURL = USER_TX_LOCATION
      12. # org.quartz.scheduler.wrapJobExecutionInUserTransaction = JOBS_IN_USER_TX
      13. # org.quartz.scheduler.idleWaitTime = IDLE_WAIT_TIME
      14. # org.quartz.scheduler.dbFailureRetryInterval = DB_FAILURE_RETRY_INTERVAL
      15. # org.quartz.scheduler.classLoadHelper.class = CLASS_LOAD_HELPER_CLASS
      16. # org.quartz.context.key.SOME_KEY = SOME_VALUE

       

      下面是具體說明:



      3.1.2.2 線程池(ThreadPool)的配置

      下面是具體說明: 

      1. # 定制一個(gè)線程池的一般模式如下:
      2. #
      3. # org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
      4. # org.quartz.threadPool.threadCount = THREAD_COUNT
      5. # org.quartz.threadPool.threadPriority = THREAD_PRIO
      6. #
      7. # 簡單線程池(SimpleThreadPool)的選項(xiàng)參數(shù):
      8. #
      9. # org.quartz.threadPool.makeThreadsDaemons = DAEMON_THREADS
      10. # org.quartz.threadPool.threadsInheritGroupOfInitializingThread = INHERIT_GRP
      11. # org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = INHERIT_LDR
      12. #
      13. # or
      14. #
      15. # org.quartz.threadPool.class = com.mycompany.goo.FooThreadPool
      16. # org.quartz.threadPool.somePropOfFooThreadPool = someValue
      17. #

      查看本文第二部分:http://gocom./modules/newbb/forumtopic19180_9963_40.htm

      2007/12/19 10:08

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多