1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Spring整合Quartz定時任務(wù)并在集群、分布式系統(tǒng)中的應(yīng)用

      概述

      10年積累的網(wǎng)站制作、成都網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有三原免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

      雖然單個Quartz實例能給予你很好的Job調(diào)度能力,但它不能滿足典型的企業(yè)需求,如可伸縮性、高可靠性滿足。假如你需要故障轉(zhuǎn)移的能力并能運行日益增多的 Job,Quartz集群勢必成為你應(yīng)用的一部分了。使用 Quartz 的集群能力可以更好的支持你的業(yè)務(wù)需求,并且即使是其中一臺機器在最糟的時間崩潰了也能確保所有的 Job 得到執(zhí)行。

      Quartz 中集群如何工作

      一個 Quartz 集群中的每個節(jié)點是一個獨立的 Quartz 應(yīng)用,它又管理著其他的節(jié)點。意思是你必須對每個節(jié)點分別啟動或停止。不像許多應(yīng)用服務(wù)器的集群,獨立的 Quartz 節(jié)點并不與另一其的節(jié)點或是管理節(jié)點通信。Quartz 應(yīng)用是通過數(shù)據(jù)庫表來感知到另一應(yīng)用的。

      圖:表示了每個節(jié)點直接與數(shù)據(jù)庫通信,若離開數(shù)據(jù)庫將對其他節(jié)點一無所知

      Spring整合Quartz定時任務(wù)并在集群、分布式系統(tǒng)中的應(yīng)用

      創(chuàng)建Quartz數(shù)據(jù)庫表

      因為Quartz 集群依賴于數(shù)據(jù)庫,所以必須首先創(chuàng)建Quartz數(shù)據(jù)庫表。Quartz 包括了所有被支持的數(shù)據(jù)庫平臺的 SQL 腳本。在 /docs/dbTables 目錄下找到那些 SQL 腳本,這里的 是解壓 Quartz 分發(fā)包后的目錄。
      這里采用的Quartz 2.2.3版本,總共11張表,不同版本,表個數(shù)可能不同。數(shù)據(jù)庫為MySQL,用tables_mysql_innodb.sql創(chuàng)建數(shù)據(jù)庫表。

      Spring整合Quartz定時任務(wù)并在集群、分布式系統(tǒng)中的應(yīng)用

      #
      # In your Quartz properties file, you'll need to set 
      # org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
      #
      #
      # By: Ron Cordell - roncordell
      # I didn't see this anywhere, so I thought I'd post it here. This is the script from Quartz to create the tables in a MySQL database, modified to use INNODB instead of MYISAM.
      
      DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
      DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
      DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
      DROP TABLE IF EXISTS QRTZ_LOCKS;
      DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
      DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
      DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
      DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
      DROP TABLE IF EXISTS QRTZ_TRIGGERS;
      DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
      DROP TABLE IF EXISTS QRTZ_CALENDARS;
      
      CREATE TABLE QRTZ_JOB_DETAILS(
      SCHED_NAME VARCHAR(120) NOT NULL,
      JOB_NAME VARCHAR(200) NOT NULL,
      JOB_GROUP VARCHAR(200) NOT NULL,
      DESCRIPTION VARCHAR(250) NULL,
      JOB_CLASS_NAME VARCHAR(250) NOT NULL,
      IS_DURABLE VARCHAR(1) NOT NULL,
      IS_NONCONCURRENT VARCHAR(1) NOT NULL,
      IS_UPDATE_DATA VARCHAR(1) NOT NULL,
      REQUESTS_RECOVERY VARCHAR(1) NOT NULL,
      JOB_DATA BLOB NULL,
      PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP))
      ENGINE=InnoDB;
      
      CREATE TABLE QRTZ_TRIGGERS (
      SCHED_NAME VARCHAR(120) NOT NULL,
      TRIGGER_NAME VARCHAR(200) NOT NULL,
      TRIGGER_GROUP VARCHAR(200) NOT NULL,
      JOB_NAME VARCHAR(200) NOT NULL,
      JOB_GROUP VARCHAR(200) NOT NULL,
      DESCRIPTION VARCHAR(250) NULL,
      NEXT_FIRE_TIME BIGINT(13) NULL,
      PREV_FIRE_TIME BIGINT(13) NULL,
      PRIORITY INTEGER NULL,
      TRIGGER_STATE VARCHAR(16) NOT NULL,
      TRIGGER_TYPE VARCHAR(8) NOT NULL,
      START_TIME BIGINT(13) NOT NULL,
      END_TIME BIGINT(13) NULL,
      CALENDAR_NAME VARCHAR(200) NULL,
      MISFIRE_INSTR SMALLINT(2) NULL,
      JOB_DATA BLOB NULL,
      PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
      FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
      REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP))
      ENGINE=InnoDB;
      
      CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
      SCHED_NAME VARCHAR(120) NOT NULL,
      TRIGGER_NAME VARCHAR(200) NOT NULL,
      TRIGGER_GROUP VARCHAR(200) NOT NULL,
      REPEAT_COUNT BIGINT(7) NOT NULL,
      REPEAT_INTERVAL BIGINT(12) NOT NULL,
      TIMES_TRIGGERED BIGINT(10) NOT NULL,
      PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
      FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
      REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
      ENGINE=InnoDB;
      
      CREATE TABLE QRTZ_CRON_TRIGGERS (
      SCHED_NAME VARCHAR(120) NOT NULL,
      TRIGGER_NAME VARCHAR(200) NOT NULL,
      TRIGGER_GROUP VARCHAR(200) NOT NULL,
      CRON_EXPRESSION VARCHAR(120) NOT NULL,
      TIME_ZONE_ID VARCHAR(80),
      PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
      FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
      REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
      ENGINE=InnoDB;
      
      CREATE TABLE QRTZ_SIMPROP_TRIGGERS
       (     
        SCHED_NAME VARCHAR(120) NOT NULL,
        TRIGGER_NAME VARCHAR(200) NOT NULL,
        TRIGGER_GROUP VARCHAR(200) NOT NULL,
        STR_PROP_1 VARCHAR(512) NULL,
        STR_PROP_2 VARCHAR(512) NULL,
        STR_PROP_3 VARCHAR(512) NULL,
        INT_PROP_1 INT NULL,
        INT_PROP_2 INT NULL,
        LONG_PROP_1 BIGINT NULL,
        LONG_PROP_2 BIGINT NULL,
        DEC_PROP_1 NUMERIC(13,4) NULL,
        DEC_PROP_2 NUMERIC(13,4) NULL,
        BOOL_PROP_1 VARCHAR(1) NULL,
        BOOL_PROP_2 VARCHAR(1) NULL,
        PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
        FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) 
        REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
      ENGINE=InnoDB;
      
      CREATE TABLE QRTZ_BLOB_TRIGGERS (
      SCHED_NAME VARCHAR(120) NOT NULL,
      TRIGGER_NAME VARCHAR(200) NOT NULL,
      TRIGGER_GROUP VARCHAR(200) NOT NULL,
      BLOB_DATA BLOB NULL,
      PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
      INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP),
      FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
      REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP))
      ENGINE=InnoDB;
      
      CREATE TABLE QRTZ_CALENDARS (
      SCHED_NAME VARCHAR(120) NOT NULL,
      CALENDAR_NAME VARCHAR(200) NOT NULL,
      CALENDAR BLOB NOT NULL,
      PRIMARY KEY (SCHED_NAME,CALENDAR_NAME))
      ENGINE=InnoDB;
      
      CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
      SCHED_NAME VARCHAR(120) NOT NULL,
      TRIGGER_GROUP VARCHAR(200) NOT NULL,
      PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP))
      ENGINE=InnoDB;
      
      CREATE TABLE QRTZ_FIRED_TRIGGERS (
      SCHED_NAME VARCHAR(120) NOT NULL,
      ENTRY_ID VARCHAR(95) NOT NULL,
      TRIGGER_NAME VARCHAR(200) NOT NULL,
      TRIGGER_GROUP VARCHAR(200) NOT NULL,
      INSTANCE_NAME VARCHAR(200) NOT NULL,
      FIRED_TIME BIGINT(13) NOT NULL,
      SCHED_TIME BIGINT(13) NOT NULL,
      PRIORITY INTEGER NOT NULL,
      STATE VARCHAR(16) NOT NULL,
      JOB_NAME VARCHAR(200) NULL,
      JOB_GROUP VARCHAR(200) NULL,
      IS_NONCONCURRENT VARCHAR(1) NULL,
      REQUESTS_RECOVERY VARCHAR(1) NULL,
      PRIMARY KEY (SCHED_NAME,ENTRY_ID))
      ENGINE=InnoDB;
      
      CREATE TABLE QRTZ_SCHEDULER_STATE (
      SCHED_NAME VARCHAR(120) NOT NULL,
      INSTANCE_NAME VARCHAR(200) NOT NULL,
      LAST_CHECKIN_TIME BIGINT(13) NOT NULL,
      CHECKIN_INTERVAL BIGINT(13) NOT NULL,
      PRIMARY KEY (SCHED_NAME,INSTANCE_NAME))
      ENGINE=InnoDB;
      
      CREATE TABLE QRTZ_LOCKS (
      SCHED_NAME VARCHAR(120) NOT NULL,
      LOCK_NAME VARCHAR(40) NOT NULL,
      PRIMARY KEY (SCHED_NAME,LOCK_NAME))
      ENGINE=InnoDB;
      
      CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY);
      CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP);
      
      CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
      CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP);
      CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME);
      CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
      CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE);
      CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
      CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
      CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME);
      CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
      CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
      CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
      CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);
      
      CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME);
      CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
      CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
      CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP);
      CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
      CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
      
      commit;

      配置數(shù)據(jù)庫連接池

      1.配置jdbc.properties文件

      jdbc.url=jdbc\:mysql\://192.168.1.132\:3306/jiafuwei?useUnicode\=true&characterEncoding\=utf8&autoReconnect\=true
      jdbc.username=root
      jdbc.password=123456
      jdbc.driverClassName=com.mysql.jdbc.Driver

      2.配置applicationContext.xml文件

      <?xml version="1.0" encoding="UTF-8"?>
      
      
        
      
        
        
          
            
              classpath:jdbc.properties
            
          
        
      
      
        
        
          
          
          
          
          
          
          
          
          
        
      

      創(chuàng)建Job測試服務(wù)類

      package com.sundoctor.quartz.cluster.example;
      
      import java.io.Serializable;
      
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      import org.springframework.stereotype.Service;
      
      
      @Service("simpleService")
      public class SimpleService {
        
        private static final long serialVersionUID = 122323233244334343L;
        private static final Logger logger = LoggerFactory.getLogger(SimpleService.class);
        
        public void testMethod1(){
          //這里執(zhí)行定時調(diào)度業(yè)務(wù)
          logger.info("testMethod1.......1");
          System.out.println("2--testMethod1......."+System.currentTimeMillis()/1000);
        }
        
        public void testMethod2(){
          logger.info("testMethod2.......2");  
        }
      }

      創(chuàng)建一個Job類MyQuartzJobBean1

      package com.sundoctor.quartz.cluster.example;
      
      import org.quartz.DisallowConcurrentExecution;
      import org.quartz.JobExecutionContext;
      import org.quartz.JobExecutionException;
      import org.quartz.PersistJobDataAfterExecution;
      import org.quartz.SchedulerException;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      import org.springframework.context.ApplicationContext;
      import org.springframework.scheduling.quartz.QuartzJobBean;
      
      @PersistJobDataAfterExecution
      @DisallowConcurrentExecution// 不允許并發(fā)執(zhí)行
      public class MyQuartzJobBean1 extends QuartzJobBean {
      
        private static final Logger logger = LoggerFactory.getLogger(MyQuartzJobBean1.class);
      
        @Override
        protected void executeInternal(JobExecutionContext jobexecutioncontext) throws JobExecutionException {
      
          SimpleService simpleService = getApplicationContext(jobexecutioncontext).getBean("simpleService",
              SimpleService.class);
          simpleService.testMethod1();
      
        }
      
        private ApplicationContext getApplicationContext(final JobExecutionContext jobexecutioncontext) {
          try {
            return (ApplicationContext) jobexecutioncontext.getScheduler().getContext().get("applicationContextKey");
          } catch (SchedulerException e) {
            logger.error("jobexecutioncontext.getScheduler().getContext() error!", e);
            throw new RuntimeException(e);
          }
        }
      
      }

      配置 Quartz 使用集群

      1.配置節(jié)點的 quartz.properties 文件

      org.quartz.scheduler.instanceName = TestScheduler1  
      org.quartz.scheduler.instanceId = AUTO 
      
      org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
      org.quartz.threadPool.threadCount = 10
      org.quartz.threadPool.threadPriority = 5
      org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
      
      org.quartz.jobStore.misfireThreshold = 60000
      org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
      org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
      org.quartz.jobStore.tablePrefix = QRTZ_
      org.quartz.jobStore.maxMisfiresToHandleAtATime=10
      org.quartz.jobStore.isClustered = true 
      org.quartz.jobStore.clusterCheckinInterval = 20000

      org.quartz.scheduler.instanceName屬性可為任何值,用在 JDBC JobStore 中來唯一標識實例,但是所有集群節(jié)點中必須相同。

      org.quartz.scheduler.instanceId 屬性為 AUTO即可,基于主機名和時間戳來產(chǎn)生實例 ID。

      org.quartz.jobStore.class屬性為 JobStoreTX,將任務(wù)持久化到數(shù)據(jù)中。因為集群中節(jié)點依賴于數(shù)據(jù)庫來傳播 Scheduler 實例的狀態(tài),你只能在使用 JDBC JobStore 時應(yīng)用 Quartz 集群。這意味著你必須使用 JobStoreTX 或是 JobStoreCMT 作為 Job 存儲;你不能在集群中使用 RAMJobStore。

      org.quartz.jobStore.isClustered 屬性為 true,你就告訴了 Scheduler 實例要它參與到一個集群當中。這一屬性會貫穿于調(diào)度框架的始終,用于修改集群環(huán)境中操作的默認行為。

      org.quartz.jobStore.clusterCheckinInterval 屬性定義了Scheduler 實例檢入到數(shù)據(jù)庫中的頻率(單位:毫秒)。Scheduler 檢查是否其他的實例到了它們應(yīng)當檢入的時候未檢入;這能指出一個失敗的 Scheduler 實例,且當前 Scheduler 會以此來接管任何執(zhí)行失敗并可恢復(fù)的 Job。通過檢入操作,Scheduler 也會更新自身的狀態(tài)記錄。clusterChedkinInterval 越小,Scheduler 節(jié)點檢查失敗的 Scheduler 實例就越頻繁。默認值是 15000 (即15 秒)。

      2.配置applicationContext-quartz.xml文件

      <?xml version="1.0" encoding="UTF-8"?>
      
      
        
          
            
          
          
              
          
            
              
            
          
        
      
        
          
            com.sundoctor.quartz.cluster.example.MyQuartzJobBean1
            
            
              
        
        
          
          
        
      

      dataSource:項目中用到的數(shù)據(jù)源,里面包含了quartz用到的11張數(shù)據(jù)庫表;

      applicationContextSchedulerContextKey: 是org.springframework.scheduling.quartz.SchedulerFactoryBean這個類中把spring上下 文以key/value的方式存放在了SchedulerContext中了,可以用applicationContextSchedulerContextKey所 定義的key得到對應(yīng)spring 的ApplicationContext;

      configLocation:用于指明quartz的配置文件的位置

      requestsRecovery

      requestsRecovery屬性必須設(shè)置為 true,當Quartz服務(wù)被中止后,再次啟動或集群中其他機器接手任務(wù)時會嘗試恢復(fù)執(zhí)行之前未完成的所有任務(wù)。

      運行Quartz集群

      在相同或不同的機器上運行com.sundoctor.quartz.cluster.example.test.MainTest進行測試,在本例中只是簡單打印一下日志。

      package com.sundoctor.quartz.cluster.example.test;
      
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      public class MainTest {
      
        /**
         * @param args
         */
        public static void main(String[] args) {
          ApplicationContext springContext = new ClassPathXmlApplicationContext(new String[]{"classpath:applicationContext.xml","classpath:applicationContext-quartz.xml"});
        }
      
      }

      Quartz 實際并不關(guān)心你是在相同的還是不同的機器上運行節(jié)點。當集群是放置在不同的機器上時,通常稱之為水平集群。節(jié)點是跑在同一臺機器是,稱之為垂直集群。對于垂直集群,存在著單點故障的問題。這對高可用性的應(yīng)用來說是個壞消息,因為一旦機器崩潰了,所有的節(jié)點也就被有效的終止了。

      當你運行水平集群時,時鐘應(yīng)當要同步,以免出現(xiàn)離奇且不可預(yù)知的行為。假如時鐘沒能夠同步,Scheduler 實例將對其他節(jié)點的狀態(tài)產(chǎn)生混亂。有幾種簡單的方法來保證時鐘何持同步,而且也沒有理由不這么做。最簡單的同步計算機時鐘的方式是使用某一個 Internet 時間服務(wù)器(Internet Time Server ITS)。

      沒什么會阻止你在相同環(huán)境中使用集群的和非集群的 Quartz 應(yīng)用。唯一要注意的是這兩個環(huán)境不要混用在相同的數(shù)據(jù)庫表。意思是非集群環(huán)境不要使用與集群應(yīng)用相同的一套數(shù)據(jù)庫表;否則將得到希奇古怪的結(jié)果,集群和非集群的 Job 都會遇到問題。

      假如你讓一個非集群的 Quartz 應(yīng)用與集群節(jié)點并行著運行,設(shè)法使用 JobInitializationPlugin和 RAMJobStore。

      項目下載地址,點擊下載。里面包含所需的jar。

      在eclipse的兩個工作空間同時開啟這兩個項目,連接同一個mysql數(shù)據(jù)庫,發(fā)現(xiàn)只有一個定時任務(wù)在運行,停掉其中一個項目,另外一個項目的定時任務(wù)開啟了。

      以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


      文章標題:Spring整合Quartz定時任務(wù)并在集群、分布式系統(tǒng)中的應(yīng)用
      鏈接分享:http://ef60e0e.cn/article/pesese.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        洪江市| 台前县| 临泽县| 景宁| 永州市| 乳源| 临安市| 翼城县| 亳州市| 双牌县| 罗江县| 隆德县| 蓬莱市| 香河县| 平遥县| 九台市| 杭州市| 抚顺市| 武威市| 阿鲁科尔沁旗| 怀宁县| 额济纳旗| 辉县市| 高唐县| 崇州市| 广州市| 七台河市| 万州区| 武功县| 临江市| 黄平县| 德兴市| 鄂尔多斯市| 闻喜县| 云阳县| 民权县| 福海县| 横峰县| 丹阳市| 方山县| 汕尾市|