C# Quartz.dll使用

c#版本QUARTZ DEMO示例,其自带接口方法已足够全面。

注意

任务调度器:Scheduler,来自于Scheduler工厂,其会自动加载持久层的任务数据并等待启动。注意任务调度器关闭后不能重启,所以任务调度器应在进程关闭时调用。

任务:job,任务可以有多个触发器在,也就是任务可以有多个出发时间点。job停止会停止多触发器下的所有该job。

触发器:Trigger,用来设置时间,作用在于到达时间点时执行对应的job。触发器停止只停止该触发器去出发某一job,其他触发器仍可以触发该job。

配置方式

一般使用代码中直接配置。如下:

连接MYSQL配置方式,需要mysql驱动dll和Quartz.Serialization.Json.dll和Newtonsoft.Json.dll至同一文件夹
 

properties = new NameValueCollection
{
    ["quartz.scheduler.instanceName"] = "TestScheduler",
    ["quartz.scheduler.instanceId"] = "instance_one",
    ["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz",
    ["quartz.threadPool.threadCount"] = "5",
    ["quartz.jobStore.misfireThreshold"] = "60000",
    ["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
    ["quartz.jobStore.useProperties"] = "false",
    ["quartz.jobStore.dataSource"] = "default",
    ["quartz.jobStore.tablePrefix"] = "QRTZ_",
    ["quartz.jobStore.clustered"] = "true",
    ["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.MySQLDelegate, Quartz",
    ["quartz.dataSource.default.connectionString"] = "server=192.168.1.50;port=3306;user=root;password=handhand; database=quartznet;" + "SslMode=" + MySqlSslMode.None + ";",
    ["quartz.dataSource.default.provider"] = "MySql",
    ["quartz.serializer.type"] = "json"
};

连接sqlite方式,该方式不可启用集群,需要sqlite驱动dll和Quartz.Serialization.Json.dll和Newtonsoft.Json.dll至同一文件夹

string dataSourceFile = System.Environment.CurrentDirectory + "//quartz_demo.db";
properties = new NameValueCollection
{
    ["quartz.scheduler.instanceName"] = "TestScheduler",
    ["quartz.scheduler.instanceId"] = "instance_one",
    ["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz",
    ["quartz.threadPool.threadCount"] = "5",
    ["quartz.jobStore.misfireThreshold"] = "60000",

    ["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
    ["quartz.jobStore.useProperties"] = "true",
    ["quartz.jobStore.dataSource"] = "default",
    ["quartz.jobStore.tablePrefix"] = "QRTZ_",
    ["quartz.jobStore.clustered"] = "false",
    ["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz",
    ["quartz.dataSource.default.connectionString"] = "Data Source=" + dataSourceFile + ";Pooling=true;FailIfMissing=false;Version=3;UTF8Encoding=True;Journal Mode=DELETE;",
    ["quartz.dataSource.default.provider"] = "SQLite",
    ["quartz.serializer.type"] = "json"
};

无数据库配置文件启动方式,需要引用Quartz.Jobs.dll和Quartz.Plugins.dll

properties = new NameValueCollection
{
    ["quartz.plugin.triggHistory.type"] = "Quartz.Plugin.History.LoggingJobHistoryPlugin, Quartz.Plugins",
    ["quartz.plugin.jobInitializer.type"] = "Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins",
    ["quartz.plugin.jobInitializer.fileNames"] = "quartz_jobs.xml",
    ["quartz.plugin.jobInitializer.failOnFileNotFound"] = "true",
    ["quartz.plugin.jobInitializer.scanInterval"] = "120"
};

建立任务调度器工厂

factory = new StdSchedulerFactory(properties);

获取任务调度器

scheduler = await factory.GetScheduler().ConfigureAwait(false);

建立任务

 JobKey jKey = new JobKey("job1", "group1");
            TriggerKey tKey = new TriggerKey("trigger1", "group1");
            IJobDetail job = JobBuilder.Create<TestJob>()
                .WithIdentity(jKey)
                .Build();

建立触发器
 

 ITrigger trigger = TriggerBuilder.Create()
                .StartNow()
                .WithIdentity(tKey)
                .WithCronSchedule("* * * * * ? *")
                .ForJob(job)
                .Build();

任务附加到调度器

await scheduler.AddJob(job, true, true).ConfigureAwait(false);

触发器附加到调度器
 

if (!await scheduler.CheckExists(tKey).ConfigureAwait(false))
            {
                await scheduler.ScheduleJob(trigger).ConfigureAwait(false);
                log.Info("Trigger Is Exited.");
                return;
            }

启动调度器

 Task l = scheduler.Start();
            l.Wait();

重启调度器

 Task l = scheduler.ResumeAll();
            l.Wait();

暂停调度器
 

 Task l = scheduler.PauseAll();
            l.Wait();

调度器彻底关闭

Task l = scheduler.Shutdown();
            l.Wait();

暂停触发器
 

Task l = scheduler.PauseTrigger(new TriggerKey("trigger1", "group1"));
            l.Wait();

重启触发器

Task l = scheduler.ResumeTrigger(new TriggerKey("trigger1", "group1"));
            l.Wait();

暂停任务

 Task l = scheduler.PauseJob(new JobKey("job1", "group1"));
            l.Wait();

重启任务

 Task l = scheduler.ResumeJob(new JobKey("job1", "group1"));
            l.Wait();

删除任务

Task l = scheduler.DeleteJob(new JobKey("job1", "group1"));
            l.Wait();

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz是一个用于调度任务的开源框架。在使用Quartz时,可以通过配置属性文件quartz.properties来对其进行配置。默认情况下,Quartz会加载classpath下的quartz.properties文件作为配置属性,如果找不到该文件,则会使用Quartz框架自身jar包下的org/quartz目录中的quartz.properties文件。如果需要指定其他的属性配置文件,可以通过设置org.quartz.properties属性来指定。另外,也可以在调用StdSchedulerFactory的getScheduler()方法之前调用initialize(xx)方法来初始化factory配置。 如果在项目路径下存在quartz.properties文件,则会优先加载该文件进行配置。如果项目路径下不存在该文件,则会加载默认的quartz.properties文件,其默认路径和内容如下所示: 我们通常使用quartz.properties属性配置文件(默认情况下均使用该文件)结合StdSchedulerFactory来使用Quartz。StdSchedulerFactory会加载属性配置文件并实例化一个Scheduler。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [quartz.properties配置文件详解](https://blog.csdn.net/bobozai86/article/details/123777036)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Quartz的属性文件quartz.properties](https://blog.csdn.net/chengqiuming/article/details/84189195)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值