• Quartz.NET持久化


    Quartz.NET所用到的数据库表结构

    官方提供的各种数据库脚本:https://github.com/quartznet/quartznet/tree/master/database/tables

    本实例中我使用的是Microsoft SQL Server 2012,对应的脚本如下:(新建一个名为QuartzDemo的数据库,执行以下脚本)

    --USE [enter_db_name_here]
    GO
    
    IF 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_DETAILS
    GO
    
    IF 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_TRIGGERS
    GO
    
    IF 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_TRIGGERS
    GO
    
    IF 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_TRIGGERS
    GO
    
    IF  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]
    GO
    
    IF 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]
    GO
    
    IF 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]
    GO
    
    IF 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]
    GO
    
    IF 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]
    GO
    
    IF  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]
    GO
    
    IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_LOCKS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
    DROP TABLE [dbo].[QRTZ_LOCKS]
    GO
    IF  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]
    GO
    
    IF 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]
    GO
    
    IF 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_TRIGGERS
    GO
    
    IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1)
    DROP TABLE [dbo].[QRTZ_TRIGGERS]
    GO
    
    CREATE TABLE [dbo].[QRTZ_CALENDARS] (
      [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
      [CALENDAR_NAME] [NVARCHAR] (200)  NOT NULL ,
      [CALENDAR] [IMAGE] NOT NULL
    )
    GO
    
    CREATE 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) 
    )
    GO
    
    CREATE 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 
    )
    GO
    
    CREATE TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] (
      [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
      [TRIGGER_GROUP] [NVARCHAR] (150)  NOT NULL 
    )
    GO
    
    CREATE 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
    )
    GO
    
    CREATE TABLE [dbo].[QRTZ_LOCKS] (
      [SCHED_NAME] [NVARCHAR] (100)  NOT NULL ,
      [LOCK_NAME] [NVARCHAR] (40)  NOT NULL 
    )
    GO
    
    CREATE 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
    )
    GO
    
    CREATE 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
    )
    GO
    
    CREATE 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,
    )
    GO
    
    CREATE 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
    )
    GO
    
    CREATE 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
    )
    GO
    
    ALTER TABLE [dbo].[QRTZ_CALENDARS] WITH NOCHECK ADD
      CONSTRAINT [PK_QRTZ_CALENDARS] PRIMARY KEY  CLUSTERED
      (
        [SCHED_NAME],
        [CALENDAR_NAME]
      ) 
    GO
    
    ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] WITH NOCHECK ADD
      CONSTRAINT [PK_QRTZ_CRON_TRIGGERS] PRIMARY KEY  CLUSTERED
      (
        [SCHED_NAME],
        [TRIGGER_NAME],
        [TRIGGER_GROUP]
      ) 
    GO
    
    ALTER TABLE [dbo].[QRTZ_FIRED_TRIGGERS] WITH NOCHECK ADD
      CONSTRAINT [PK_QRTZ_FIRED_TRIGGERS] PRIMARY KEY  CLUSTERED
      (
        [SCHED_NAME],
        [ENTRY_ID]
      ) 
    GO
    
    ALTER TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] WITH NOCHECK ADD
      CONSTRAINT [PK_QRTZ_PAUSED_TRIGGER_GRPS] PRIMARY KEY  CLUSTERED
      (
        [SCHED_NAME],
        [TRIGGER_GROUP]
      ) 
    GO
    
    ALTER TABLE [dbo].[QRTZ_SCHEDULER_STATE] WITH NOCHECK ADD
      CONSTRAINT [PK_QRTZ_SCHEDULER_STATE] PRIMARY KEY  CLUSTERED
      (
        [SCHED_NAME],
        [INSTANCE_NAME]
      ) 
    GO
    
    ALTER TABLE [dbo].[QRTZ_LOCKS] WITH NOCHECK ADD
      CONSTRAINT [PK_QRTZ_LOCKS] PRIMARY KEY  CLUSTERED
      (
        [SCHED_NAME],
        [LOCK_NAME]
      ) 
    GO
    
    ALTER TABLE [dbo].[QRTZ_JOB_DETAILS] WITH NOCHECK ADD
      CONSTRAINT [PK_QRTZ_JOB_DETAILS] PRIMARY KEY  CLUSTERED
      (
        [SCHED_NAME],
        [JOB_NAME],
        [JOB_GROUP]
      ) 
    GO
    
    ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] WITH NOCHECK ADD
      CONSTRAINT [PK_QRTZ_SIMPLE_TRIGGERS] PRIMARY KEY  CLUSTERED
      (
        [SCHED_NAME],
        [TRIGGER_NAME],
        [TRIGGER_GROUP]
      ) 
    GO
    
    ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] WITH NOCHECK ADD
      CONSTRAINT [PK_QRTZ_SIMPROP_TRIGGERS] PRIMARY KEY  CLUSTERED
      (
        [SCHED_NAME],
        [TRIGGER_NAME],
        [TRIGGER_GROUP]
      ) 
    GO
    
    ALTER TABLE [dbo].[QRTZ_TRIGGERS] WITH NOCHECK ADD
      CONSTRAINT [PK_QRTZ_TRIGGERS] PRIMARY KEY  CLUSTERED
      (
        [SCHED_NAME],
        [TRIGGER_NAME],
        [TRIGGER_GROUP]
      ) 
    GO
    
    ALTER TABLE [dbo].QRTZ_BLOB_TRIGGERS WITH NOCHECK ADD
      CONSTRAINT [PK_QRTZ_BLOB_TRIGGERS] PRIMARY KEY  CLUSTERED
      (
        [SCHED_NAME],
        [TRIGGER_NAME],
        [TRIGGER_GROUP]
      ) 
    GO
    
    ALTER 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 CASCADE
    GO
    
    ALTER 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 CASCADE
    GO
    
    ALTER 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 CASCADE
    GO
    
    ALTER 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]
      )
    GO
    
    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)
    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不明白怎么存放实例的时候)。

    然后建一个控制台程序用于测试。需要NuGet安装Quartz.NET,然后代码中引用,这里不再累述。

    可参考:http://www.cnblogs.com/zhuyongblogs/p/5733312.html

    using System;
    
    //引入命名空间
    using Quartz;
    using Quartz.Impl;
    using System.Configuration;
    using System.Collections.Specialized;
    
    namespace QuartzDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                //获取StdSchedulerFactory配置
                var properties = GetNameValueCollection();
                //初始化调度器
                ISchedulerFactory sf = new StdSchedulerFactory(properties);
                IScheduler scheduler = sf.GetScheduler();
                //启动调度器
                scheduler.Start();
    
                #region  这部分只执行一次,执行一次后已经将信息存入表中
    
                ////初始化要执行的任务
                //IJobDetail job = JobBuilder.Create<QuartzDemoJob>().Build();
    
                ////初始化任务的触发器
                //ITrigger simpleTrigger = TriggerBuilder.Create().WithSimpleSchedule(c => c
                //    .WithIntervalInSeconds(5).RepeatForever()
                //    .WithMisfireHandlingInstructionNextWithRemainingCount()).Build();
    
                ////将任务添加到调度器中
                //scheduler.ScheduleJob(job, simpleTrigger);
    
                #endregion
    
                Console.Read();
            }
    
            /// <summary>
            /// 初始化StdSchedulerFactory配置
            /// </summary>
            /// <returns></returns>
            public static NameValueCollection GetNameValueCollection()
            {
                //配置项
                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"] = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
                //sqlserver版本
                properties["quartz.dataSource.myDS.provider"] = "SqlServer-20";
                //最大链接数
                properties["quartz.dataSource.myDS.maxConnections"] = "2";
                //是否集群
                //properties["quartz.jobStore.clustered"] = "false";
                //instanceId生成方式
                //properties["quartz.scheduler.instanceId"] = "AUTO";
                return properties;
            }
    
            //此属性防止任务并行
            [DisallowConcurrentExecution]
            public class QuartzDemoJob : IJob
            {
                public void Execute(IJobExecutionContext context)
                {
                    Console.WriteLine(DateTime.Now);
                }
            }
        }
    }

    注意#region ... #endregion部分的代码只执行一次后表中已经有数据,再次启动时不用再执行也能定时执行任务。

     

  • 相关阅读:
    管理学课程都包括哪些方面的内容?
    关于如何创业的好书推荐:《创业必读12篇》
    关于企业文化的书籍,这本最经典
    如何开展行政管理工作?这些书可以告诉你答案
    企业家必读书籍有哪些?适合企业高管看的书推荐
    如何学好PHP?
    现在入门还有必要学PHP吗?
    Python实现递归二分法查找
    SAP Control framework–CL_GUI_TOOLBAR
    SAP Control framework–DIALOGBOX_CONTAINER
  • 原文地址:https://www.cnblogs.com/zhuyongblogs/p/5752638.html
Copyright © 2020-2023  润新知