quartz

C#基于Quartz.NET实现任务调度并部署Windows服务

别等时光非礼了梦想. 提交于 2019-12-01 10:07:38
一、Quartz.NET介绍 Quartz.NET是一个强大、开源、轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net mvc、.Net Core应用中。它灵活而不复杂。你能够用它来为执行一个作业而创建简单的或复杂的作业调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。 官网: http://www.quartz-scheduler.net/ 源码:https://github.com/quartznet/quartznet 二、Quartz.NET用途 一,可以定时发邮件通知。 二 , 电商网站的定时打折活动。(比如规定11月11日 淘宝购买女朋友打八折) 三, 定时对数据更新 或者添加。 四,自己朋友生日。 可以定时发生日祝福。 等等 (我也不一一举例了) 三、Quartz.NET安装 我使用的VS版本是2017的 选择工具 - NuGet包管理 - 管理解决方案的NuGet包 输入 Quartz.NET 安装 还可以通过NuGet控制台 通过安装命令 Install-Package Quartz 四、Quartz.NET实现思路 一:继承并实现IJob接口,在Execute 方法中写你要定时执行的事情(切记 ) 二:使用Quartz创建任务调度核心代码步骤

Quartz任务调度(3)存储与持久化操作配置详细解

两盒软妹~` 提交于 2019-12-01 08:57:40
内存存储RAMJobStore Quartz默认使用RAMJobStore,它的优点是速度。因为所有的 Scheduler 信息都保存在计算机内存中,访问这些数据随着电脑而变快。而无须访问数据库或IO等操作,但它的缺点是将 Job 和 Trigger 信息存储在内存中的。因而我们每次重启程序,Scheduler 的状态,包括 Job 和 Trigger 信息都丢失了。 Quartz 的内存 Job 存储的能力是由一个叫做 org.quartz.simple.RAMJobStore 类提供。在我们的quartz-2.x.x.jar包下的org.quartz包下即存储了我们的默认配置quartz.properties。打开这个配置文件,我们会看到如下信息 # Default Properties file for use by StdSchedulerFactory # to create a Quartz Scheduler Instance, if a different # properties file is not explicitly specified. # org.quartz.scheduler.instanceName: DefaultQuartzScheduler org.quartz.scheduler.rmi.export: false org.quartz

quartz在集群环境下的最终解决方案

妖精的绣舞 提交于 2019-12-01 06:18:27
在集群环境下,大家会碰到一直困扰的问题,即多个 APP 下如何用 quartz 协调处理自动化 JOB 。 大家想象一下,现在有 A , B , C3 台机器同时作为集群服务器对外统一提供 SERVICE : A , B , C 3 台机器上各有一个 QUARTZ ,他们会按照即定的 SCHEDULE 自动执行各自的任务。 我们先不说实现什么功能,就说这样的 架构 其实有点像多线程。 那多线程里就会存在“资源竞争”的问题,即可能产生脏读,脏写,由于三台 APP SERVER 里都有 QUARTZ ,因此会存在重复处理 TASK 的现象。 一般外面的解决方案是只在一台 APP 上装 QUARTZ ,其它两台不装,这样集群就形同虚设了; 另一种解决方案是动代码,这样就要影响到原来已经写好的 QUARTZ JOB 的代码了,这对程序开发人员来说比较痛苦; 本人仔细看了一下 spring 的结构和 QUARTZ 的文档,结合 Quartz 自身可以实例化进数据的特性找到了相关的解决方案。 本方案优点: 1. 每台作为集群点的 APP SERVER 上都可以布署 QUARTZ ; 2. QUARTZ 的 TASK ( 12 张表)实例化如 数据库 ,基于数据库引擎及 High-Available 的策略(集群的一种策略)自动协调每个节点的 QUARTZ ,当任一一节点的 QUARTZ

Quartz Tutorial 1 - Using Quartz & The Quartz API, Jobs and Trigger

时间秒杀一切 提交于 2019-12-01 05:09:21
文章目录 建议从 Getting started with Quartz 开始,先写一个非常简单的demo,基于这个demo,去理解后面的内容。 Using Quartz 在使用调度器之前,应当先实例化一个,这便用到了 SchedulerFactory 。也有人将 factory 的一个实例保存在了JDNI(Java Naming and Directory Interface)存储,因此实例化一个调度器也就更容易了。 调度器一旦被实例化完成,它可以被启动,可以处于等待模式,也可以被关闭。注意,一旦一个调度器关闭了,如果不重新实例化,它就不能重新启动。如果调度器并未被启动,或者整出一暂停状态,触发器也不会被触发(作业并不会执行)。 以下代码片段实例化并启动了一个调度器,并调度执行了一个作业 123456789101112131415161718192021222324 SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();Scheduler sched = schedFact.getScheduler();sched.start();JobDetail job = JobBuilder.newJob(HelloJob.class) .withIdentity("myJob", "group1")

Quartz Tutorial 1 - Using Quartz & The Quartz API, Jobs and Trigger

三世轮回 提交于 2019-12-01 05:05:54
文章目录 建议从 Getting started with Quartz 开始,先写一个非常简单的demo,基于这个demo,去理解后面的内容。 Using Quartz 在使用调度器之前,应当先实例化一个,这便用到了 SchedulerFactory 。也有人将 factory 的一个实例保存在了JDNI(Java Naming and Directory Interface)存储,因此实例化一个调度器也就更容易了。 调度器一旦被实例化完成,它可以被启动,可以处于等待模式,也可以被关闭。注意,一旦一个调度器关闭了,如果不重新实例化,它就不能重新启动。如果调度器并未被启动,或者整出一暂停状态,触发器也不会被触发(作业并不会执行)。 以下代码片段实例化并启动了一个调度器,并调度执行了一个作业 123456789101112131415161718192021222324 SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();Scheduler sched = schedFact.getScheduler();sched.start();JobDetail job = JobBuilder.newJob(HelloJob.class) .withIdentity("myJob", "group1")

Spring Boot集成Quartz注入Spring管理的类

爷,独闯天下 提交于 2019-12-01 04:55:16
Spring有自己的Schedule定时任务,在Spring boot中使用的时候,不能动态管理JOB,于是就使用Quartz来实现。 在Spring Boot中配置Quartz: import java.io.IOException; import java.util.Properties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.PropertiesFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.quartz.SchedulerFactoryBean; @Configuration

JavaLib-quartz | 基于Spring Boot Quartz开发的定时任务

对着背影说爱祢 提交于 2019-12-01 04:54:47
基于Spring Boot Quartz开发的JavaLib-quartz,目的是帮你快速构建定时任务系统,你可以专心编写你的业务逻辑,而不必关注定时任务具体是如何实现的,他的性能如何,有没有异常以及异常处理,监控等等问题。这些你可以在文档中得知。 快速使用 第1步、添加依赖 <!-- 测试版需要指定仓库 --> <repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> </repositories> <dependencies> <dependency> <groupId>com.github.fengwenyi</groupId> <artifactId>JavaLib-quartz</artifactId> <version>1.0-gamma</version> </dependency> </dependencies> 第2步、HelloTask.java package com.fengwenyi.example.javalib_quartz.start; import com.fengwenyi.javalib.quartz.QuartzTask; import org.springframework.stereotype.Component;

解决SpringBoot使用Quartz无法注入Bean的问题

夙愿已清 提交于 2019-12-01 04:54:31
依赖 <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> 任务工厂 JobFactory // 解决SpringBoot不能再Quartz中注入Bean的问题 @Component public class JobFactory extends AdaptableJobFactory { /** * AutowireCapableBeanFactory接口是BeanFactory的子类 * 可以连接和填充那些生命周期不被Spring管理的已存在的bean实例 */ private AutowireCapableBeanFactory factory; public JobFactory(AutowireCapableBeanFactory factory) { this.factory = factory; } /** * 创建Job实例 */ @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { // 实例化对象 Object job = super

宜信开源|分布式任务调度平台SIA-TASK的架构设计与运行流程

妖精的绣舞 提交于 2019-12-01 04:53:37
一、分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务。我们常常需要一些任务调度系统来帮助解决问题。随着微服务化架构的逐步演进,单体架构逐渐演变为分布式、微服务架构。在此背景下,很多原先的任务调度平台已经不能满足业务系统的需求,于是出现了一些基于分布式的任务调度平台。 1.1 分布式任务调度的演进 在实际业务开发过程中,很多时候我们无可避免地需要使用一些定时任务来解决问题。通常我们会有多种解决方案:使用 Crontab 或 SpringCron (当然这种情况可能机器很少而且任务简单又不是很多的情况下)。然而,当应用复杂度升高、定时任务数量增多且任务之间产生依赖关系时,Crontab 进行定时任务的管理配置就会非常混乱,严重影响工作效率。这时就会产生一系列问题: 任务管理混乱,生命周期无法统一协调管理; 任务之间如果存在依赖关系,难以编排。 随着互联网的发展,分布式服务架构势越来越流行。相应的也需要一个分布式任务调度系统来管理分布式架构中的定时任务。 1.2 分布式任务调度架构 当垂直应用越来越多,应用之间交互也会越来越复杂,通常我们采用分布式或者微服务架构,将核心业务抽取出来,形成单独的服务。一个独立的微服务群体逐渐形成稳定的服务中心,使得业务应用能更快地响应多变的市场需求。 此时,用于提高业务复用及整合的分布式服务框架成为关键。同时,由于服务独立

Quartz学习

扶醉桌前 提交于 2019-12-01 02:51:26
Quartz学习 1.Quartz CronTrigger 最完整配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3 小时 是 0-23 , - * / 4 日 是 1-31 , - * ? / L W 5 月 是 1-12 or JAN-DEC , - * / 6 周 是 1-7 or SUN-SAT , - * ? / L # 7 年 否 empty 或 1970-2099 , - * / 通配符说明: * 表示所有值. 例如:在分的字段上设置 "*",表示每一分钟都会触发。 ? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的10号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为"?" 具体设置为 0 0 0 10 * ? - 表示区间。例如 在小时上设置 "10-12",表示 10,11,12点都会触发。 , 表示指定多个值,例如在周字段上设置 "MON,WED,FRI" 表示周一,周三和周五触发 / 用于递增触发。如在秒上面设置"5/15" 表示从5秒开始,每增15秒触发(5,20,35,50)。 在月字段上设置'1/3'所示每月1号开始