.net core中使用Quartz任務調度


使用xml配置Quartz任務調度程序

1、Nuget

Install-Package Quartz
Install-Package Quartz.Plugins

 

2、站點根目錄下加入文件quartz.config、quartz_jobs.xml,(注意需要設置“復制到輸出目錄”為始終復制)文件名稱默認:
quartz.config:

# You can configure your scheduler in either <quartz> configuration section
# or in quartz properties file
# Configuration section has precedence
quartz.scheduler.instanceName = ServerScheduler

# configure thread pool info
quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
quartz.threadPool.threadCount = 10
quartz.threadPool.threadPriority = Normal

# job initialization plugin handles our xml reading, without it defaults are used
quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins
quartz.plugin.xml.fileNames = ~/quartz_jobs.xml

quartz_jobs.xml:

<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
<processing-directives>
<overwrite-existing-data>true</overwrite-existing-data>
</processing-directives>
<schedule>
<job>
<name>TestJob</name>
<group>DefaultJobGroup</group>
<description>任務描述</description>
<job-type>TestQuartzService.TestJob,TestQuartzService</job-type>
<durable>true</durable>
<recover>false</recover>
</job>
<trigger>
<cron>
<name>TestTrigger</name>
<group>DefaultJobTriggerGroup</group>
<job-name>TestJob</job-name>
<job-group>DefaultJobGroup</job-group>
<misfire-instruction>DoNothing</misfire-instruction>
<cron-expression>*/5 * * * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>

 

3、創建QuartzFactory.cs,名稱自定義:

public static void Start()
{
     StdSchedulerFactory factory = new StdSchedulerFactory();
     IScheduler scheduler = factory.GetScheduler().Result;
     Schedulers.Add(scheduler);
     scheduler.Start();
}

 

4、最后定義業務job,實現IJob接口

 public class TestJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {
            return Task.Run(() =>
            {
              //業務操作

            });
        }
    }

 

 在IJob實現類中實現構造函數的參數注入

1、實現IJobFactory接口

    /// <summary>
    /// 任務調度工廠實現,為了調用作業的參數構造函數,Quartz.NET提供了IJobFactory接口
    /// </summary>
    public class DemoFactory : IJobFactory
    {
        private readonly IServiceProvider _serviceProvider;
        public DemoFactory(IServiceProvider serviceProvider)
        {
            _serviceProvider = serviceProvider;
        }

        public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
        {
            var jobDetail = bundle.JobDetail;
            var job = (IJob)_serviceProvider.GetService(jobDetail.JobType);
            return job;
        }

        public void ReturnJob(IJob job)
        {
            var disposable = job as IDisposable;
            disposable?.Dispose();
        }
    }

 

2、通過IServiceCollection注冊IJob實現類

var listServices = ReflectorHelper.GetTClassName("IJob實現類所在的程序集名稱"); //ReflectorHelper 為程序集反射工具類
foreach (var item in listServices)
{
  services.AddScoped(item);
}

 

3、使用實現的工廠,為了調用作業的參數構造函數

Start中設置:
scheduler.JobFactory = new DemoFactory(services.BuildServiceProvider());

 

4、Startup中啟動:

QuartzFactory.Start();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM