.netCore 使用 Quartz 实例
一、参考源文链接
1、https://www.likecs.com/show-897836.html
2、https://blog.csdn.net/weixin_43614067/article/details/115373776
二、Quartz基本使用
public class Job1 : IJob
{
public Task Execute(IJobExecutionContext context)
{
Console.WriteLine("开始定时任务1");
return Task.CompletedTask;
}
} public class Job2 : IJob
{
public Task Execute(IJobExecutionContext context)
{
Console.WriteLine("开始定时任务2");
return Task.CompletedTask;
}
}
/// <summary>
/// 定时任务执行实例1
/// </summary>
public static void Test1()
{
var _scheduler = new StdSchedulerFactory().GetScheduler().Result;
var trigger1 = TriggerBuilder.Create()
.WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())//每10秒执行一次
.Build();
var trigger2 = TriggerBuilder.Create()
.WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())//每10秒执行一次
.Build();
var jobDetail = JobBuilder.Create<Job1>()
.WithIdentity("Myjob1", "group")//我们给这个作业取了个“Myjob”的名字,并取了个组名为“group”
.Build();
var jobDetai2 = JobBuilder.Create<Job2>()
.WithIdentity("Myjob2", "group")//我们给这个作业取了个“Myjob”的名字,并取了个组名为“group”
.Build();
_scheduler.ScheduleJob(jobDetail, trigger1).Wait();
_scheduler.ScheduleJob(jobDetai2, trigger2).Wait();
_scheduler.Start().Wait();
}
二、暂停和恢复某个任务
public class StartJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
for (int i = 0; i < 3; i++)
{
try
{
Thread.Sleep(1000);
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
}
Console.WriteLine(("hello~~~~~~~~~~~~~~~~~~" + i + DateTime.Now.ToString()));
} return Task.CompletedTask;
} }
public class PauseJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sched = null;
try
{
sched = sf.GetScheduler().Result;
Console.WriteLine("对象sf:" + sf);
Console.WriteLine("对象sched:" + sched);
}
catch (SchedulerException e)
{
Console.WriteLine(e.StackTrace);
}
CommonUtil.PauseJob(sched, "startJob", "group1");
return Task.CompletedTask;
}
}
public class ResumeJob : IJob
{
public Task Execute(IJobExecutionContext context)
{
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sched = null;
try
{
sched = sf.GetScheduler().Result;
Console.WriteLine("对象sf:" + sf);
Console.WriteLine("对象sched:" + sched);
}
catch (SchedulerException e)
{
Console.WriteLine(e.StackTrace);
}
CommonUtil.ResumeJob(sched, "startJob", "group1"); return Task.CompletedTask;
} }
public class CommonUtil
{
/// <summary>
/// 暂停一个job,暂停后,任务若未执行完,会执行完毕为止。
/// </summary>
/// <param name="scheduler"></param>
/// <param name="jobName"></param>
/// <param name="jobGroupName"></param>
public static void PauseJob(IScheduler scheduler, string jobName, string jobGroupName)
{
try
{
scheduler.PauseJob(new JobKey(jobName, jobGroupName));
Console.WriteLine(string.Format("定时任务%s暂停成功!", jobName));
}
catch (SchedulerException e)
{
Console.WriteLine((string.Format("定时任务%s暂停异常!", jobName)));
}
} /// <summary>
/// 恢复一个job 恢复定时器时立刻先执行一次定时器的任务 然后再按计划执行
/// </summary>
/// <param name="scheduler"></param>
/// <param name="jobName"></param>
/// <param name="jobGroupName"></param>
public static void ResumeJob(IScheduler scheduler, String jobName, String jobGroupName)
{
try
{
scheduler.ResumeJob(new JobKey(jobName, jobGroupName));
Console.WriteLine((string.Format("定时任务%s恢复成功!", jobName)));
}
catch (SchedulerException e)
{
Console.WriteLine((string.Format("定时任务%s恢复异常!", jobName)));
}
} }
public static void Test()
{ ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sched = sf.GetScheduler().Result; //创建相关的job信息
IJobDetail startJob = JobBuilder.Create<StartJob>()
.WithIdentity("startJob", "group1")
.Build(); IJobDetail pauseJob = JobBuilder.Create<PauseJob>()
.WithIdentity("pauseJob", "group2")
.Build(); IJobDetail resumeJob = JobBuilder.Create<ResumeJob>()
.WithIdentity("resumeJob", "group3")
.Build(); //创建触发器的名称
//每2s执行startJob任务
ITrigger startTrigger = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1")
.WithSchedule(CronScheduleBuilder.CronSchedule("0/2 * * * * ?")).Build();
//每10s执行暂停任务,去暂停startJob任务
ITrigger pauseTrigger = TriggerBuilder.Create()
.WithIdentity("trigger2", "group2")
.WithSchedule(CronScheduleBuilder.CronSchedule("0/10 * * * * ?")).Build();
//每15s执行恢复任务,去恢复startJob任务
ITrigger resumeTrigger = TriggerBuilder.Create()
.WithIdentity("trigger3", "group3")
.WithSchedule(CronScheduleBuilder.CronSchedule("0/15 * * * * ?")).Build(); sched.ScheduleJob(startJob, startTrigger);
sched.ScheduleJob(pauseJob, pauseTrigger);
sched.ScheduleJob(resumeJob, resumeTrigger); sched.Start();
}
.netCore 使用 Quartz 实例的更多相关文章
- 初识Quartz之第一个Quartz实例
转: 初识Quartz之第一个Quartz实例 2018年04月09日 17:07:31 carson0408 阅读数:366 版权声明:本文为博主原创文章,未经博主允许不得转载. https:/ ...
- 如何在spring中运行多个schedulers quartz 实例
http://wzping.iteye.com/blog/468263 1.定义一个JOB <!-- 使用pojo来做job,指定pojo和method --> <bean ...
- (转)Java任务调度框架Quartz入门教程指南(三)任务调度框架Quartz实例详解深入理解Scheduler,Job,Trigger,JobDetail
http://blog.csdn.net/zixiao217/article/details/53053598 首先给一个简明扼要的理解: Scheduler 调度程序-任务执行计划表,只有安排进执行 ...
- Quartz实例:quartz定时任务代码示例
转自:http://www.blogchong.com/post/96.html quartz定时任务调度框架,使用实例. Job类://即实际调度任务实现 . package net.csdn.ed ...
- quartz 实例记录
之前介绍过了quartz的一些相关理论知识,感觉上挺简单的,实际动手操作也确实如此,去quartz的官网上把Jar包下载下来以后,会看到它的目录里有例子程序,看完第一个例子觉得还可以,但是看后面两个例 ...
- quartz实例以及主要事项(注解)
实现任务类: package com.vnetoo.nec.base.quartz; import org.springframework.context.annotation.Lazy;import ...
- quartz 实例
第一步:添加jar包 第二步:在spring配置文件中添加 <context:annotation-config/> 第三步:编写定时代码 我们通常做Java后台接口,是让前端访问的,让前 ...
- 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
很多的软件项目中都会使用到定时任务.定时轮询数据库同步,定时邮件通知等功能..NET Framework具有“内置”定时器功能,通过System.Timers.Timer类.在使用Timer类需要面对 ...
- 【Quartz】将定时任务持久化到数据库
之前的文章所做的demo是将定时任务的信息保存在内存中的,见以下配置 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 如果,我们需要在 ...
- 【淘淘】Quartz之集群利弊
一.前言: 虽然单个Quartz实例能给予我们很好的任务job调度能力,但它不能满足典型的企业需求,如可伸缩性.高可靠性满足.假如你需要故障转移的能力并能运行日益增多的 Job,Quartz集群势必成 ...
随机推荐
- 【Spring】Sring基础概念(黑马SSM学习笔记)
目录 Spring简介 Spring是什么 Spring发展 Spring优势 Spring体系结构 Spring快速入门 Spring程序开发步骤 不用Spring的一般步骤 使用Spring框架 ...
- Jackson ObjectMapper - 指定对象属性的序列化顺序
注释很有用,但在任何地方应用起来都会很痛苦.您可以配置整个 ObjectMapper 以这种方式工作 当前杰克逊版本: objectMapper.configure(MapperFeature.SOR ...
- 配置 HTTP/HTTPS 网络代理
使用Docker的过程中,因为网络原因,通常需要使用 HTTP/HTTPS 代理来加速镜像拉取.构建和使用.下面是常见的三种场景. 为 dockerd 设置网络代理 "docker pu ...
- maven打jar包运行main方法
pom文件添加上这段 <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</ ...
- 【转载】 SpringBoot声明式事务的简单运用
https://blog.csdn.net/justry_deng/article/details/80828180 关于事物的基本概念等这里就不介绍了. Spring声明式事物的实现,有两种方式:第 ...
- Qt编写的项目作品20-百度地图综合应用(在线+离线+区域+下载)
一.功能特点 (一).省市区域地图封装类功能特点 同时支持闪烁点图.迁徙图.区域地图.世界地图.仪表盘等. 可以设置标题.提示信息.背景颜色.文字颜色.线条颜色.区域颜色等各种颜色. 可设置城市的名称 ...
- [转]OpenCV4.8 GPU版本CMake编译详细步骤 与CUDA代码演示
导 读 本文将详细介绍如何使用CMake编译OpenCV4.8 CUDA版本并给出Demo演示,方便大家学习使用. CMake编译详细步骤 废话不多说,直接进入正题! [1]我使用的工具版本VS201 ...
- ubuntu opencv安装与卸载
安装opencv 1.在下面网站上下载所需版本的源文件Releases - OpenCVhttps://opencv.org/releases/ 2.解压并进入该文件夹 3.命令行执行如下指令 ...
- Intellij IDEA IDE中采用Maven集成SSM框架时配置文件的功能和关系说明
Intellij IDEA IDE中采用Maven集成SSM框架时设计的配置文件主要有:pom.xml.web.xml.applicationContext.xml.springmvc-config. ...
- [AI] 基于大模型的AI搜索引擎
概述:基于大模型的AI搜索引擎 ∈ 大模型智能体应用 AI搜索引擎的架构与组成 用户层:用户输入问题/关键词 Agent层: 用户的输入(当前和历史) + 问题提问模板 => 标准的问题 ... ...