.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
.NET6控制台程序使用quartz.net的更多相关文章
- Quartz+log4net实现控制台程序定时运行,并且记录日志
c# 控制台程序定时运行,并记录日志. 组件Quartz + log4net Quartz定时运行程序,log4net记录日志. 首先建立控制台程序"QuartzTest" 安装Q ...
- 大比速: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提供了众多的远程服务形式.在只 ...
- 【C#基础知识】C#控制台程序入口函数 Main(string[] args) 参数详解
测试环境vs2019+.net5.0 请看 :https://cloud.tencent.com/developer/article/1507934 本测试环境vs2022+.net6.0 +wind ...
- 在.NET Core控制台程序中使用依赖注入
之前都是在ASP.NET Core中使用依赖注入(Dependency Injection),昨天遇到一个场景需要在.NET Core控制台程序中使用依赖注入,由于对.NET Core中的依赖注入机制 ...
- 使用 CommandLineApplication 类创建专业的控制台程序
闲话 在很久很久以前,电脑是命令行/终端/控制台的天下,那屏幕上的光标在行云流水般的键盘敲击下欢快地飞跃着,那一行行的字符输出唰唰唰地滚动着--直到 Windows 95 的出现(那时候我还不知道苹果 ...
- C#基础-关于用json给控制台程序传值的坑
上周遇到了一个非常诡异的坑,首先写了两个程序,第一个程序输出成dll,第二个程序是控制台程序. 在第一个程序里,我使用了process去启动第二个程序,同时传入了一个Json作为参数,即: Proce ...
- 你们信不信一句Console.WriteLine就能让你的控制台程序失去响应
好久没更新博客了,今天是扒衣见君节,难得闲下来就来说说一个最近有趣的发现吧. 首先废话不多说,直接上代码吧 class Program { static void Main(string[] args ...
- 【转】WIN32 控制台程序
http://blog.csdn.net/houmin0036/article/details/7702236 win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境下运行的应用 ...
- Async Console Programs 异步控制台程序
如果你正在写一个控制台程序,你可能最终想要一个异步的main方法,像这样: class Program { static async void Main(string[] args) { ... } ...
随机推荐
- 天脉2(ACoreOS653)操作系统学习02
天脉2(ACoreOS653)操作系统学习02 一.分区内通信方法 分区内通信指同一分区内进程之间的通信.ARINC 653定义的分区内进程通信机制,包括:缓存队列(Buffers-Queue).黑板 ...
- 【数据结构与算法Python版学习笔记】图——基本概念及相关术语
概念 图Graph是比树更为一般的结构, 也是由节点和边构成 实际上树是一种具有特殊性质的图 图可以用来表示现实世界中很多有意思的事物,包括道路系统.城市之间的航班.互联网的连接,甚至是计算机专业的一 ...
- Manjaro安装Mariadb
Mariadb是MySQL的一个复刻.由于MySQL被Oracle公司收购,MySQL的一些原始开发者担心MySQL会有开源方面的某些隐患,故领导开发了Mariadb. 如今,Mariadb已经作为许 ...
- [no_code][Beta]事后分析
设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们要解决的目前的手写表单的电子化问题,办公电子化问题的一个key问题.定义十分清楚: 输入: 手写表单 ...
- WEB前端工程师如何做职业规划?
对于一个WEB前端的职业规划,其实是有各种的答案,没有哪种答案是完全正确的,全凭自己的选择,只要是自己选定了,坚持去认真走,就好.在这里, 我只是 简要说一下自己对于这块儿内容的理解.有一个观点想要分 ...
- CICD 流水线就该这么玩系列之一
今天给大家分享的是 DevOps 世界中非常流行的一个 GitOps 工具 - Argo CD.如果你还不知道什么是 GitOps,欢迎留言告诉我,根据热度,我会再写一篇详细讲解 GitOps 的文章 ...
- 大型DELETE(删除大量数据)的一种解决方案
通过执行单条DELETE语句来删除一个大型的数据集会有以下的缺点: 1.DELETE语句的操作要被完整地记录到日志中,这要求在事务日志中要有足够的空间以完成整个事务: 2.在删除操作期间(可能会花费很 ...
- Delphi的手机程序隐藏顶部信号栏
把TForm的BorderStyle设置为None 记之!
- kail入侵win2003 sp2 中文版系统
攻击机:kail -- IP:192.168.74.132 目标靶机:win2003 sp2 中文版系统-- IP:192.168.74.128 一.扫描漏洞 1. 在kail中运行 namp 192 ...
- 策略路由——使用Router-Policy策略路由进行路由协议的引入
1.实验目的:实现R3-R2-R1为访问主线路,R3-R4-R1为访问备份线路 2.实验拓扑及IP,如图; 3.基本配置(端口IP) R1: <Huawei>sys[Huawei]sys ...