亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Quartz.net持久化與集群部署開發詳解

2019-11-14 14:18:08
字體:
來源:轉載
供稿:網友

序言

我前邊有幾篇文章有介紹過quartz的基本使用語法與類庫。但是他的執行計劃都是被寫在本地的xml文件中。無法做集群部署,我讓它看起來脆弱不堪,那是我的罪過。

但是quart.net是經過許多大項目的錘煉,走到啦今天,支持集群高可用的開發方案那是一定的,今天我就給小結下我的quartz.net開發升級過程。

Quartz.net的數據庫表結構

如果支持集群與持久化,單靠本機的內存和xml來保存計算任務調度的各種狀態值,可想而知,是困難的。所以支持數據庫這樣的解決方案,OpenSymphony組織怎么可能會給遺漏。

官方提供的各種數據庫腳本:https://github.com/quartznet/quartznet/tree/master/database/tables

下面我給大家展示下quartz任務調度的MS SQLSERVER表結構

創建表結構T-SQL腳本

USE [enter_db_name_here]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)ALTER TABLE [dbo].[QRTZ_TRIGGERS] DROP CONSTRAINT FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILSGOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] DROP CONSTRAINT FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERSGOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] DROP CONSTRAINT FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERSGOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1)ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] DROP CONSTRAINT FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERSGOIF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_QRTZ_JOB_LISTENERS_QRTZ_JOB_DETAILS]') AND parent_object_id = OBJECT_ID(N'[dbo].[QRTZ_JOB_LISTENERS]'))ALTER TABLE [dbo].[QRTZ_JOB_LISTENERS] DROP CONSTRAINT [FK_QRTZ_JOB_LISTENERS_QRTZ_JOB_DETAILS]IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_QRTZ_TRIGGER_LISTENERS_QRTZ_TRIGGERS]') AND parent_object_id = OBJECT_ID(N'[dbo].[QRTZ_TRIGGER_LISTENERS]'))ALTER TABLE [dbo].[QRTZ_TRIGGER_LISTENERS] DROP CONSTRAINT [FK_QRTZ_TRIGGER_LISTENERS_QRTZ_TRIGGERS]IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CALENDARS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_CALENDARS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CRON_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_CRON_TRIGGERS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_BLOB_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_BLOB_TRIGGERS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_FIRED_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_FIRED_TRIGGERS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_PAUSED_TRIGGER_GRPS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS]GOIF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_JOB_LISTENERS]') AND type in (N'U'))DROP TABLE [dbo].[QRTZ_JOB_LISTENERS]IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SCHEDULER_STATE]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_SCHEDULER_STATE]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_LOCKS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_LOCKS]GOIF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_TRIGGER_LISTENERS]') AND type in (N'U'))DROP TABLE [dbo].[QRTZ_TRIGGER_LISTENERS]IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_JOB_DETAILS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPLE_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS]GOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPROP_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].QRTZ_SIMPROP_TRIGGERSGOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)DROP TABLE [dbo].[QRTZ_TRIGGERS]GOCREATE TABLE [dbo].[QRTZ_CALENDARS] (  [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,  [CALENDAR_NAME] [NVARCHAR] (200)  NOT NULL ,  [CALENDAR] [IMAGE] NOT NULL)GOCREATE TABLE [dbo].[QRTZ_CRON_TRIGGERS] (  [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,  [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,  [CRON_EXPRESSION] [NVARCHAR] (120)  NOT NULL ,  [TIME_ZONE_ID] [NVARCHAR] (80) )GOCREATE TABLE [dbo].[QRTZ_FIRED_TRIGGERS] (  [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,  [ENTRY_ID] [NVARCHAR] (95)  NOT NULL ,  [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,  [INSTANCE_NAME] [NVARCHAR] (200)  NOT NULL ,  [FIRED_TIME] [BIGINT] NOT NULL ,  [SCHED_TIME] [BIGINT] NOT NULL ,  [PRIORITY] [INTEGER] NOT NULL ,  [STATE] [NVARCHAR] (16)  NOT NULL,  [JOB_NAME] [NVARCHAR] (150)  NULL ,  [JOB_GROUP] [NVARCHAR] (150)  NULL ,  [IS_NONCONCURRENT] BIT  NULL ,  [REQUESTS_RECOVERY] BIT  NULL )GOCREATE TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] (  [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL )GOCREATE TABLE [dbo].[QRTZ_SCHEDULER_STATE] (  [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,  [INSTANCE_NAME] [NVARCHAR] (200)  NOT NULL ,  [LAST_CHECKIN_TIME] [BIGINT] NOT NULL ,  [CHECKIN_INTERVAL] [BIGINT] NOT NULL)GOCREATE TABLE [dbo].[QRTZ_LOCKS] (  [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,  [LOCK_NAME] [NVARCHAR] (40)  NOT NULL )GOCREATE TABLE [dbo].[QRTZ_JOB_DETAILS] (  [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,  [JOB_NAME] [NVARCHAR] (150)  NOT NULL ,  [JOB_GROUP] [NVARCHAR] (150)  NOT NULL ,  [DESCRipTION] [NVARCHAR] (250) NULL ,  [JOB_CLASS_NAME] [NVARCHAR] (250)  NOT NULL ,  [IS_DURABLE] BIT  NOT NULL ,  [IS_NONCONCURRENT] BIT  NOT NULL ,  [IS_UPDATE_DATA] BIT  NOT NULL ,  [REQUESTS_RECOVERY] BIT  NOT NULL ,  [JOB_DATA] [IMAGE] NULL)GOCREATE TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] (  [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,  [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,  [REPEAT_COUNT] [INTEGER] NOT NULL ,  [REPEAT_INTERVAL] [BIGINT] NOT NULL ,  [TIMES_TRIGGERED] [INTEGER] NOT NULL)GOCREATE TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] (  [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,  [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,  [STR_PROP_1] [NVARCHAR] (512) NULL,  [STR_PROP_2] [NVARCHAR] (512) NULL,  [STR_PROP_3] [NVARCHAR] (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] BIT NULL,  [BOOL_PROP_2] BIT NULL,)GOCREATE TABLE [dbo].[QRTZ_BLOB_TRIGGERS] (  [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,  [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,  [BLOB_DATA] [IMAGE] NULL)GOCREATE TABLE [dbo].[QRTZ_TRIGGERS] (  [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,  [TRIGGER_NAME] [NVARCHAR] (150)  NOT NULL ,  [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL ,  [JOB_NAME] [NVARCHAR] (150)  NOT NULL ,  [JOB_GROUP] [NVARCHAR] (150)  NOT NULL ,  [DESCRIPTION] [NVARCHAR] (250) NULL ,  [NEXT_FIRE_TIME] [BIGINT] NULL ,  [PREV_FIRE_TIME] [BIGINT] NULL ,  [PRIORITY] [INTEGER] NULL ,  [TRIGGER_STATE] [NVARCHAR] (16)  NOT NULL ,  [TRIGGER_TYPE] [NVARCHAR] (8)  NOT NULL ,  [START_TIME] [BIGINT] NOT NULL ,  [END_TIME] [BIGINT] NULL ,  [CALENDAR_NAME] [NVARCHAR] (200)  NULL ,  [MISFIRE_INSTR] [INTEGER] NULL ,  [JOB_DATA] [IMAGE] NULL)GOALTER TABLE [dbo].[QRTZ_CALENDARS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_CALENDARS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [CALENDAR_NAME]  ) GOALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_CRON_TRIGGERS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) GOALTER TABLE [dbo].[QRTZ_FIRED_TRIGGERS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_FIRED_TRIGGERS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [ENTRY_ID]  ) GOALTER TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_PAUSED_TRIGGER_GRPS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [TRIGGER_GROUP]  ) GOALTER TABLE [dbo].[QRTZ_SCHEDULER_STATE] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_SCHEDULER_STATE] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [INSTANCE_NAME]  ) GOALTER TABLE [dbo].[QRTZ_LOCKS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_LOCKS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [LOCK_NAME]  ) GOALTER TABLE [dbo].[QRTZ_JOB_DETAILS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_JOB_DETAILS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [JOB_NAME],    [JOB_GROUP]  ) GOALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_SIMPLE_TRIGGERS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) GOALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_SIMPROP_TRIGGERS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) GOALTER TABLE [dbo].[QRTZ_TRIGGERS] WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_TRIGGERS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) GOALTER TABLE [dbo].QRTZ_BLOB_TRIGGERS WITH NOCHECK ADD  CONSTRAINT [PK_QRTZ_BLOB_TRIGGERS] PRIMARY KEY  CLUSTERED  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) GOALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] ADD  CONSTRAINT [FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) REFERENCES [dbo].[QRTZ_TRIGGERS] (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) ON DELETE CASCADEGOALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] ADD  CONSTRAINT [FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) REFERENCES [dbo].[QRTZ_TRIGGERS] (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) ON DELETE CASCADEGOALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] ADD  CONSTRAINT [FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY  (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) REFERENCES [dbo].[QRTZ_TRIGGERS] (    [SCHED_NAME],    [TRIGGER_NAME],    [TRIGGER_GROUP]  ) ON DELETE CASCADEGOALTER TABLE [dbo].[QRTZ_TRIGGERS] ADD  CONSTRAINT [FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS] FOREIGN KEY  (    [SCHED_NAME],    [JOB_NAME],    [JOB_GROUP]  ) REFERENCES [dbo].[QRTZ_JOB_DETAILS] (    [SCHED_NAME],    [JOB_NAME],    [JOB_GROUP]  )GOCREATE 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)GO
View Code

部分我們擴展開發常用到的表及字段說明

1、QRTZ_JOB_DETAILS:存儲的是job的詳細信息,包括:[DESCRIPTION]描述,[IS_DURABLE]是否持久化,[JOB_DATA]持久化對象等基本信息。

2、QRTZ_TRIGGERS:觸發器信息,包含:job的名,組外鍵,[DESCRIPTION]觸發器的描述等基本信息,還有[START_TIME]開始執行時間,[END_TIME]結束執行時間,[PREV_FIRE_TIME]上次執行時間,[NEXT_FIRE_TIME]下次執行時間,[TRIGGER_TYPE]觸發器類型:simple和cron,[TRIGGER_STATE]執行狀態:WAITING,PAUSED,ACQUIRED分別為:等待,暫停,運行中。

3、QRTZ_CRON_TRIGGERS:保存cron表達式。

4、QRTZ_SCHEDULER_STATE:存儲集群中note實例信息,quartz會定時讀取該表的信息判斷集群中每個實例的當前狀態,INSTANCE_NAME:之前配置文件中org.quartz.scheduler.instanceId配置的名字,就會寫入該字段,如果設置為AUTO,quartz會根據物理機名和當前時間產生一個名字。  [LAST_CHECKIN_TIME]上次檢查時間,[CHECKIN_INTERVAL]檢查間隔時間。

5、QRTZ_PAUSED_TRIGGER_GRPS:暫停的任務組信息。

6、QRTZ_LOCKS,悲觀鎖發生的記錄信息。

7、QRTZ_FIRED_TRIGGERS,正在運行的觸發器信息。

8、QRTZ_SIMPLE_TRIGGERS,簡單的出發器詳細信息。

9、QRTZ_BLOB_TRIGGERS,觸發器存為二進制大對象類型(用于Quartz用戶自己觸發數據庫定制自己的觸發器,然而JobStore不明白怎么存放實例的時候)。

.net程序配置quartz數據庫參數

                //1.首先創建一個作業調度池                var properties = new NameValueCollection();                //存儲類型                properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";                //表明前綴                properties["quartz.jobStore.tablePrefix"] = "QRTZ_";                //驅動類型                properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";                //數據源名稱                properties["quartz.jobStore.dataSource"] = "myDS";                //連接字符串                properties["quartz.dataSource.myDS.connectionString"] = Config.QuartzConnStr;                //sqlserver版本                properties["quartz.dataSource.myDS.provider"] = "SqlServer-20";                //最大鏈接數                //properties["quartz.dataSource.myDS.maxConnections"] = "5";                // First we must get a reference to a scheduler                ISchedulerFactory sf = new StdSchedulerFactory(properties);                IScheduler sched = sf.GetScheduler();

上面便是創建一個調度器,以及配置與quartz數據庫的詳細參數。有啦數據庫后你會很興奮,直接寫t-sql操作數據庫多么便捷啊,并且所有的任務調度信息都一目了然,這里我要告訴你的事,你不需要直接寫sql語句,quart提供的類庫就能自動對數據庫進行填充,以完成對任務調度的管理操作。

quartz.net任務調度的各種操作方法

首先我要說下,我前面有一篇文章對quartz.net做個基本的操作描述,這里也只貼代碼,僅供參考。

1、添加任務計劃,并制定要觸發的執行類

                    #region 檢查是否存在                    if (IsExistJob(m.JobGroupName, m.JobName))                    {                        return false;                    }                    #endregion                    #region 添加任務計劃                    if (m.StarTime == null)                    {                        m.StarTime = DateTime.Now;                    }                    DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(m.StarTime, 1);                    if (m.EndTime == null)                    {                        m.EndTime = DateTime.MaxValue.AddDays(-1);                    }                    DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(m.EndTime, 1);                    scheduler = GetScheduler();                    IJobDetail job = JobBuilder.Create<QuartzFunction>()                      .WithIdentity(m.JobName, m.JobGroupName)                      .WithDescription(m.JobDescribe)                      .Build();                    ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()                                                 .StartAt(starRunTime)                                                 .EndAt(endRunTime)                                                 .WithIdentity(m.JobName, m.JobGroupName)                                                 .WithCronSchedule(m.CronStr)                                                 .WithDescription(m.JobDescribe)                                                 .Build();                    scheduler.ScheduleJob(job, trigger);                    scheduler.Start();                    #endregion                    #region 關聯運行接口                    var api = new A_RunJobTriggerEntity();                    api.ApiCode = m.ApiCode;                    api.ApiType = m.ApiType;                    api.ApiUrl = m.ApiUrl;                    api.AppID = m.AppID;                    api.CreateTime = DateTime.Now;                    api.JobDescribe = m.JobDescribe;                    api.ServiceCode = m.ServiceCode;                    api.Token = m.Token;                    api.TriggerGroup = m.JobGroupName;                    api.TriggerName = m.JobName;                    new ARunJobRelationManage().Insert(api);                    #endregion

2、移除執行計劃

scheduler = GetScheduler();var trigger = new TriggerKey(jobGroup, jobName);scheduler.PauseTrigger(trigger);//停止觸發器scheduler.UnscheduleJob(trigger); //移除觸發器var result = scheduler.DeleteJob(JobKey.Create(jobName,jobGroup));

3、暫停指定任務計劃

scheduler = GetScheduler();scheduler.PauseJob(JobKey.Create(jobName, jobGroup));

4、暫停所有的任務計劃

scheduler = GetScheduler();
scheduler.PauseAll();

5、開啟指定的任務計劃

 scheduler = GetScheduler(); if (!scheduler.IsStarted) {      scheduler.Start(); } //scheduler.ResumeTrigger(new TriggerKey(jobName, jobGroup));               scheduler.ResumeJob(JobKey.Create(jobName, jobGroup));

6、開啟所有的任務計劃

scheduler = GetScheduler();if (!scheduler.IsStarted){     scheduler.Start();}//scheduler.ResumeTrigger(new TriggerKey(jobName, jobGroup));              scheduler.ResumeAll();

7、調度啟動狀態,如果調度的狀態沒有開啟,即便觸發器的狀態為等待執行,執行中,也是無效的。

scheduler = GetScheduler();if (scheduler.IsStarted){     return "開啟";}else{     return "關閉";}

8、是否集群 

//是否集群//properties["quartz.jobStore.clustered"] = "false";//properties["quartz.scheduler.instanceId"] = "AUTO";

檢驗下結果:

我在兩臺服務器上部署,設置一個任務計劃,每2秒出發一次,2臺機器同時跑,沒有重復執行,且一臺服務器down掉仍可準確無誤的運行,給圖。

總結

如果你在用quartz.net中有什么疑惑,或者有什么好的項目分享,歡迎加入右上角的群,我們一起學習進步。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美日韩中文字幕在线| 久久久天堂国产精品女人| 国产97在线亚洲| 久久精品国产v日韩v亚洲| 亚洲免费高清视频| 亚洲国产成人久久| 国产精品尤物福利片在线观看| 精品国产91久久久久久老师| 日韩亚洲精品视频| 国产999精品久久久影片官网| 亚洲美女免费精品视频在线观看| 欧美日韩第一视频| 国产精品av在线播放| 欧美日韩国产在线播放| 国产香蕉一区二区三区在线视频| 日韩三级成人av网| 欧美性极品少妇精品网站| 亚洲性无码av在线| 米奇精品一区二区三区在线观看| 91视频九色网站| 美女久久久久久久| 蜜月aⅴ免费一区二区三区| 91av在线免费观看视频| 亚洲国产天堂久久综合网| 91精品久久久久久| 亚洲激情视频网| 国产精品视频永久免费播放| 亚洲成人av在线播放| 欧美网站在线观看| 国产精品大陆在线观看| 亚洲国产成人精品女人久久久| 国产成人av在线播放| 亚洲欧美三级伦理| 国模吧一区二区| 欧美日韩国产一区在线| 国产精品自产拍在线观看中文| 国产精品96久久久久久| 成人久久一区二区| 久久久av一区| 日韩中文在线中文网在线观看| 亚洲美女av在线| 久久综合九色九九| 国产97色在线| 精品久久久一区| 国产精品中文在线| 亚州精品天堂中文字幕| 久久国内精品一国内精品| 91禁外国网站| 日韩av一区二区在线| 国产在线一区二区三区| 久久成人人人人精品欧| 亚洲国产成人av在线| 欧美黄色片视频| 中文字幕在线看视频国产欧美| 国产精品国产三级国产aⅴ浪潮| 亚洲天堂av在线免费| 亚洲欧美自拍一区| 亚洲福利在线视频| 亚洲精品www久久久| 57pao国产精品一区| 国产精品福利网站| 欧美激情视频免费观看| 成人欧美一区二区三区在线| 91日韩在线播放| 国产精品日韩久久久久| 国产一区二区三区在线观看网站| 91精品综合视频| 久久久亚洲成人| 久久久久久久一| 91精品国产综合久久久久久久久| 中文字幕精品影院| 久久亚洲精品小早川怜子66| 国内精品久久久久久中文字幕| 精品亚洲夜色av98在线观看| 一道本无吗dⅴd在线播放一区| 日韩一区二区在线视频| 久久天天躁狠狠躁夜夜躁2014| 亚洲japanese制服美女| 日韩视频第一页| 理论片在线不卡免费观看| 97超级碰碰人国产在线观看| 亚洲香蕉成视频在线观看| 亚洲最新在线视频| 国产综合在线视频| 国产精品极品在线| 欧美激情中文网| 国产精品日韩精品| 在线不卡国产精品| 中文字幕精品久久久久| 亚洲一区亚洲二区亚洲三区| 久久伊人色综合| 欧美性猛交xxxx乱大交极品| 久久6免费高清热精品| 国产精品劲爆视频| 亚洲美女喷白浆| 欧美在线国产精品| 亚洲女在线观看| 日韩av一区在线观看| 日韩欧美亚洲范冰冰与中字| www高清在线视频日韩欧美| 色多多国产成人永久免费网站| 国产一区二区三区在线播放免费观看| 91中文精品字幕在线视频| 欧美激情一区二区久久久| 日韩av在线免费观看| xxxx欧美18另类的高清| 国产999在线观看| 亚洲aⅴ日韩av电影在线观看| 亚洲精品动漫久久久久| 精品国产91久久久久久| 成人羞羞国产免费| 午夜精品视频在线| 青青久久av北条麻妃海外网| 中文字幕日韩精品在线| 欧美日韩亚洲精品一区二区三区| 国产精品青草久久久久福利99| 国产精品视频男人的天堂| 亚洲欧美日本伦理| 久久99久国产精品黄毛片入口| 欧美在线性爱视频| 亚洲美女激情视频| 欧美成人精品不卡视频在线观看| 成人午夜黄色影院| 久久精品成人动漫| 国产在线观看一区二区三区| 中文字幕久久久| 国产精品亚发布| 日韩av电影在线免费播放| xvideos亚洲人网站| 中文综合在线观看| 亚洲精品自产拍| 欧美日韩国产一区在线| 亚洲深夜福利视频| 国产精品久久久久久久久久ktv| 国产欧美婷婷中文| 日韩中文第一页| 亚洲精品videossex少妇| 欧美天堂在线观看| 亚洲美女喷白浆| 久久精品国产清自在天天线| 亚洲人成网站色ww在线| 91精品国产高清久久久久久久久| 日韩理论片久久| 精品一区二区三区四区| 久久久久久中文字幕| 97久久精品视频| 国产国语videosex另类| 日韩av电影手机在线| 久久99热精品| 日韩大胆人体377p| 亚洲精品自拍视频| 国产精品精品一区二区三区午夜版| 中文字幕视频一区二区在线有码| 欧美高清视频免费观看| 午夜欧美不卡精品aaaaa| 66m—66摸成人免费视频| 国产日韩欧美在线看| 亚洲欧美日韩高清| 美日韩精品免费视频| 日韩电视剧免费观看网站| 91在线|亚洲| xxxx欧美18另类的高清| 国产精品爽爽ⅴa在线观看| 日韩欧美在线视频日韩欧美在线视频|