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

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

3.新建一个HelloQuartzJob类:

  1. using Quartz;
  2.  
  3. namespace ConsoleQuartz
  4. {
  5. public class HelloQuartzJob : IJob
  6. {
  7. public Task Execute(IJobExecutionContext context)
  8. {
  9. return Task.Factory.StartNew(() =>
  10. {
  11. Console.WriteLine("Hello Quartz.Net");
  12. });
  13. }
  14. }
  15. }

4.新建一个HelloQuartzJob2:

  1. using Quartz;
  2.  
  3. namespace ConsoleQuartz
  4. {
  5. public class HelloQuartzJob2 : IJob
  6. {
  7. public Task Execute(IJobExecutionContext context)
  8. {
  9. return Task.Factory.StartNew(() =>
  10. {
  11. Console.WriteLine("Hello HelloQuartzJob2");
  12. });
  13. }
  14. }
  15. }

5.修改Program.cs:

  1. // See https://aka.ms/new-console-template for more information
  2. using Quartz;
  3. using Quartz.Impl;
  4.  
  5. Console.WriteLine("Hello, World!");
  6.  
  7. await MainAsync();
  8. Console.ReadKey();
  9.  
  10. static async Task MainAsync()
  11. {
  12. IScheduler Scheduler=await StdSchedulerFactory.GetDefaultScheduler();
  13. await Scheduler.Start();
  14. Console.WriteLine("任务调度器已启动");
  15. }

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

  1. # You can configure your scheduler in either <quartz> configuration section
  2. # or in quartz properties file
  3. # Configuration section has precedence
  4.  
  5. quartz.scheduler.instanceName = ServerScheduler
  6.  
  7. # configure thread pool info
  8. quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool, Quartz
  9. quartz.threadPool.threadCount = 10
  10. quartz.threadPool.threadPriority = Normal
  11.  
  12. # job initialization plugin handles our xml reading, without it defaults are used
  13. #quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz
  14. quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz.Plugins
  15. quartz.plugin.xml.fileNames = ~/quartz_jobs.xml
  16.  
  17. # export this server to remoting context
  18. quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter, Quartz
  19. quartz.scheduler.exporter.port = 5552
  20. quartz.scheduler.exporter.bindName = QuartzScheduler
  21. quartz.scheduler.exporter.channelType = tcp
  22. 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,内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- This file contains job definitions in schema version 2.0 format -->
  3. <job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
  4. <processing-directives>
  5. <overwrite-existing-data>true</overwrite-existing-data>
  6. </processing-directives>
  7. <schedule>
  8. <!--定义示例任务1 Job-->
  9. <job>
  10. <name>ItemJob</name>
  11. <group>ItemJobGroup</group>
  12. <description>任务</description>
  13. <!--job-type,完整类名,命名空间,用逗号隔开-->
  14. <job-type>ConsoleQuartz.HelloQuartzJob,ConsoleQuartz</job-type>
  15. <durable>true</durable>
  16. <recover>false</recover>
  17. </job>
  18. <!--定义示例任务1 触发器 每3秒执行一次 ItemJob 任务-->
  19. <trigger>
  20. <cron>
  21. <name>ItemJobTrigger</name>
  22. <group>DItemJobTriggerGroup</group>
  23. <!--指定JOB名-->
  24. <job-name>ItemJob</job-name>
  25. <!--指定JOB组-->
  26. <job-group>ItemJobGroup</job-group>
  27. <cron-expression>0/3 * * * * ?</cron-expression>
  28. </cron>
  29. </trigger>
  30.  
  31. <!--定义示例任务2 Job-->
  32. <job>
  33. <name>ItemJob2</name>
  34. <group>ItemJobGroup2</group>
  35. <description>任务2</description>
  36. <!--job-type,完整类名,命名空间,用逗号隔开-->
  37. <job-type>ConsoleQuartz.HelloQuartzJob2,ConsoleQuartz</job-type>
  38. <durable>true</durable>
  39. <recover>false</recover>
  40. </job>
  41. <!--定义示例任务2 触发器 每4秒执行一次 ItemJob2 任务-->
  42. <trigger>
  43. <cron>
  44. <name>ItemJobTrigger2</name>
  45. <group>DItemJobTriggerGroup2</group>
  46. <job-name>ItemJob2</job-name>
  47. <job-group>ItemJobGroup2</job-group>
  48. <cron-expression>0/4 * * * * ?</cron-expression>
  49. </cron>
  50. </trigger>
  51.  
  52. </schedule>
  53. </job-scheduling-data>

8.按F5启动程序:

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

.NET6控制台程序使用quartz.net的更多相关文章

  1. Quartz+log4net实现控制台程序定时运行,并且记录日志

    c# 控制台程序定时运行,并记录日志. 组件Quartz + log4net Quartz定时运行程序,log4net记录日志. 首先建立控制台程序"QuartzTest" 安装Q ...

  2. 大比速:remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful) .net core 控制台程序使用依赖注入(Autofac)

    大比速:remoting.WCF(http).WCF(tcp).WCF(RESTful).asp.net core(RESTful) 近来在考虑一个服务选型,dotnet提供了众多的远程服务形式.在只 ...

  3. 【C#基础知识】C#控制台程序入口函数 Main(string[] args) 参数详解

    测试环境vs2019+.net5.0 请看 :https://cloud.tencent.com/developer/article/1507934 本测试环境vs2022+.net6.0 +wind ...

  4. 在.NET Core控制台程序中使用依赖注入

    之前都是在ASP.NET Core中使用依赖注入(Dependency Injection),昨天遇到一个场景需要在.NET Core控制台程序中使用依赖注入,由于对.NET Core中的依赖注入机制 ...

  5. 使用 CommandLineApplication 类创建专业的控制台程序

    闲话 在很久很久以前,电脑是命令行/终端/控制台的天下,那屏幕上的光标在行云流水般的键盘敲击下欢快地飞跃着,那一行行的字符输出唰唰唰地滚动着--直到 Windows 95 的出现(那时候我还不知道苹果 ...

  6. C#基础-关于用json给控制台程序传值的坑

    上周遇到了一个非常诡异的坑,首先写了两个程序,第一个程序输出成dll,第二个程序是控制台程序. 在第一个程序里,我使用了process去启动第二个程序,同时传入了一个Json作为参数,即: Proce ...

  7. 你们信不信一句Console.WriteLine就能让你的控制台程序失去响应

    好久没更新博客了,今天是扒衣见君节,难得闲下来就来说说一个最近有趣的发现吧. 首先废话不多说,直接上代码吧 class Program { static void Main(string[] args ...

  8. 【转】WIN32 控制台程序

    http://blog.csdn.net/houmin0036/article/details/7702236 win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运行的应用 ...

  9. Async Console Programs 异步控制台程序

    如果你正在写一个控制台程序,你可能最终想要一个异步的main方法,像这样: class Program { static async void Main(string[] args) { ... } ...

随机推荐

  1. 短短 29 天,应对高峰 100W+ 访问,看浙大如何交出满分答卷

    疫情期间"停课不停教,停课不停学",线上开课第一天,浙江大学网上开课平台访问量即突破100 万次,访客数3万余人,最高峰达 1.1万人同时在线,发起课程直播2000余场,然而系统却 ...

  2. 基于Apache Zookeeper手写实现动态配置中心(纯代码实践)

    相信大家都知道,每个项目中会有一些配置信息放在一个独立的properties文件中,比如application.properties.这个文件中会放一些常量的配置,比如数据库连接信息.线程池大小.限流 ...

  3. MySQL:提高笔记-3

    MySQL:提高笔记-3 学完基础的语法后,进一步对 MySQL 进行学习,前几篇为: MySQL:提高笔记-1 MySQL:提高笔记-2 MySQL:提高笔记-3,本文 说明:这是根据 bilibi ...

  4. UltraSoft - Beta - 发布声明

    1. Beta版本更新内容 新功能 (1)消息中心页面 课程爬取到新DDL.资源时会以通知的方式通知用户,本次同步更新了哪些内容一目了然.此外,当被作为参与成员添加DDL时也会通知.一些系统通知也会放 ...

  5. UltraSoft - Beta - Scrum Meeting 6

    Date: May 22n'd, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 修复了DDL日程自动发邮件被服务器"吞掉"的bug后端增加了 ...

  6. (转载)关于Linux C函数strtok的使用要点

    今天遇到了处理字符串的问题,比如分割问题,但是一时间想不起来什么方法,也不想手写一个类似java String中的split函数,于是百度了一下,发现了strtok这个好用的方法,以此作为总结. st ...

  7. 51nod_1001 数组中和等于K的数对(二分)

    题意: 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9 ...

  8. JAVA笔记10__Math类、Random类、Arrays类/日期操作类/对象比较器/对象的克隆/二叉树

    /** * Math类.Random类.Arrays类:具体查JAVA手册...... */ public class Main { public static void main(String[] ...

  9. Spark记录(二):Spark程序的生命周期

    本文以Spark执行模式中最常见的集群模式为例,详细的描述一下Spark程序的生命周期(YARN作为集群管理器). 1.集群节点初始化 集群刚初始化的时候,或者之前的Spark任务完成之后,此时集群中 ...

  10. PTA 列车调度 (25分)

    PTA 列车调度 (25分) [程序实现] #include<bits/stdc++.h> using namespace std; int main(){ int num,n; cin& ...