• .NET6控制台程序使用quartz.net


    1.新建一个名为“ConsoleQuartz”的.NET6控制台程序。

    2.nuget中安装Quartz和Quartz.Plugins,这2个DLL。

    3.新建一个HelloQuartzJob类:

    using Quartz;
    
    namespace ConsoleQuartz
    {
        public class HelloQuartzJob : IJob
        {
            public Task Execute(IJobExecutionContext context)
            {
                return Task.Factory.StartNew(() =>
                {
                    Console.WriteLine("Hello Quartz.Net");
                });
            }
        }
    }

    4.新建一个HelloQuartzJob2:

    using Quartz;
    
    namespace ConsoleQuartz
    {
        public class HelloQuartzJob2 : IJob
        {
            public Task Execute(IJobExecutionContext context)
            {
                return Task.Factory.StartNew(() =>
                {
                    Console.WriteLine("Hello HelloQuartzJob2");
                });
            }
        }
    }

    5.修改Program.cs:

    // See https://aka.ms/new-console-template for more information
    using Quartz;
    using Quartz.Impl;
    
    Console.WriteLine("Hello, World!");
    
    await MainAsync();
    Console.ReadKey();
    
    static async Task MainAsync()
    {
        IScheduler Scheduler=await StdSchedulerFactory.GetDefaultScheduler();
        await Scheduler.Start();     
        Console.WriteLine("任务调度器已启动");
    }

    6.在编译输出目录(bin\Debug\net6.0)下新建一个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
    quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins
    quartz.plugin.xml.fileNames = ~/quartz_jobs.xml
    
    # export this server to remoting context
    quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
    quartz.scheduler.exporter.port = 5552
    quartz.scheduler.exporter.bindName = QuartzScheduler
    quartz.scheduler.exporter.channelType = tcp
    quartz.scheduler.exporter.channelName = httpQuartz

    注意quartz.plugin.xml.type,使用的是Quartz.Plugins,老版本是Quartz,如果写成

    Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz

    会报错:

    Quartz.SchedulerException:“SchedulerPlugin of type 'Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz' could not be instantiated.”
    TypeLoadException: Could not load type 'Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin' from assembly 'Quartz'.

    7.在编译输出目录(bin\Debug\net6.0)下新建一个quartz_jobs.xml,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- This file contains job definitions in schema version 2.0 format -->
    <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>
        <!--定义示例任务1 Job-->
        <job>
          <name>ItemJob</name>
          <group>ItemJobGroup</group>
          <description>任务</description>
          <!--job-type,完整类名,命名空间,用逗号隔开-->
          <job-type>ConsoleQuartz.HelloQuartzJob,ConsoleQuartz</job-type>
          <durable>true</durable>
          <recover>false</recover>
        </job>
        <!--定义示例任务1 触发器 每3秒执行一次 ItemJob 任务-->
        <trigger>
          <cron>
            <name>ItemJobTrigger</name>
            <group>DItemJobTriggerGroup</group>
            <!--指定JOB名-->
            <job-name>ItemJob</job-name>
            <!--指定JOB组-->
            <job-group>ItemJobGroup</job-group>
            <cron-expression>0/3 * * * * ?</cron-expression>
          </cron>
        </trigger>
        
        <!--定义示例任务2 Job-->
        <job>
          <name>ItemJob2</name>
          <group>ItemJobGroup2</group>
          <description>任务2</description>
          <!--job-type,完整类名,命名空间,用逗号隔开-->
          <job-type>ConsoleQuartz.HelloQuartzJob2,ConsoleQuartz</job-type>
          <durable>true</durable>
          <recover>false</recover>
        </job>
        <!--定义示例任务2 触发器 每4秒执行一次 ItemJob2 任务-->
        <trigger>
          <cron>
            <name>ItemJobTrigger2</name>
            <group>DItemJobTriggerGroup2</group>
            <job-name>ItemJob2</job-name>
            <job-group>ItemJobGroup2</job-group>
            <cron-expression>0/4 * * * * ?</cron-expression>
          </cron>
        </trigger>
        
      </schedule>
    </job-scheduling-data>

    8.按F5启动程序:

    Hello, World!
    任务调度器已启动
    Hello HelloQuartzJob2
    Hello Quartz.Net
    Hello HelloQuartzJob2
    Hello Quartz.Net

  • 相关阅读:
    6_10 下落的树叶(UVa699)<二叉树的DFS>
    6_9 天平(UVa839)<二叉树的DFS>
    6_8 树(UVa548)<从中序和后序恢复二叉树>
    6_7 树的层次遍历(UVa122)<二叉树的动态创建与BFS>
    6_6 小球下落(UVa679)<完全二叉树编号>
    6_4 破损的键盘(UVa11988)<链表>
    6_3 矩阵链乘(UVa424)<用栈实现简单的表达式解析>
    6_2 铁轨(UVa514)<栈>
    第五周课程总结&试验报告(三)
    第四周课程总结和实验报告
  • 原文地址:https://www.cnblogs.com/runliuv/p/15636874.html
Copyright © 2020-2023  润新知