quartz

Quartz学习

橙三吉。 提交于 2019-12-01 02:48:14
Quartz学习 (笔记内容来源: https://www.cnblogs.com/daxin/archive/2013/05/27/3101972.html) 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" 表示周一,周三和周五触发 /

Spring Boot Quartz 分布式集群任务调度实现

自作多情 提交于 2019-11-30 20:44:51
主要内容 Spring Scheduler 框架 Quartz 框架,功能强大,配置灵活 Quartz 集群 mysql 持久化定时任务脚本(tables_mysql.sql) 介绍 在工程中时常会遇到一些需求,例如定时刷新一下配置、隔一段时间检查下网络状态并发送邮件等诸如此类的定时任务。 定时任务本质就是一个异步的线程,线程可以查询或修改并执行一系列的操作。由于本质是线程,在 Java 中可以自行编写一个线程池对定时任务进行控制,但这样效率太低了,且功能有限,属于重复造轮子。 分布式任务调度应用场景 Quartz的集群功能通过故障转移和负载平衡功能为您的调度程序带来高可用性和可扩展性。 调度程序中会有很多定时任务需要执行,一台服务器已经不能满足使用,需要解决定时任务单机单点故障问题。 用Quartz框架,在集群环境下,通过数据库锁机制来实现定时任务的执行;独立的 Quartz 节点并不与另一其的节点或是管理节点通信。 Spring Scheduler 实现定时任务 1.定义 Task 类 /** * Spring Scheduled示例 */ @Component public class ScheduledTask { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM

Springboot + quartz 无法使用@Autowired注入Service的问题

你说的曾经没有我的故事 提交于 2019-11-30 20:30:51
问题 具体问题就是需要在具体任务Job中使用 @Autowired 注入自己的Service。但一直报空指针异常。原因是因为job的实例化在quartz进行,和Spring托管的Service啥的不是一条路,所以关联不到一起 翻遍了csdn也没找到好的解决方案,甚至还有配置xml的,那还用什么Springboot。 解决方案一 最后找了一个比较完整且靠谱的帖子,但是也没有解决问题。在调试中我发现,通过 @Bean 来注入的 SchedulerFactoryBean 竟然没有被任何类引用。原来是因为已经有个名字叫做"SchedulerFactoryBean"的类被注入到Spring中了(springboot干的),所以这里我换了名,成功解决。 这里我放上QuarzConfig的代码,其余部分和这里一样 https://blog.csdn.net/u013042707/article/details/82934725 @Configuration public class QuartzConfig { @Autowired private MyJobFactory myJobFactory ; @Autowired @Qualifier ( "schedulerFactoryBean2" ) private SchedulerFactoryBean

Quartz 调用

末鹿安然 提交于 2019-11-30 16:25:05
在线Cron表达式 调用( DLL下载 ) static void Main(string[] args) { //1、任务调度调用 //开启任务,操作数据,然后将数据广播给指定用户 //Cron表达式 :秒 分钟 小时 日的日 月 某一天的周 年 //每分钟执行 //string CronTime = "0/5 * * * * ? ";//每隔5秒钟执行 string CronTime = "1 * * * * ? * ";//每隔一分钟执行一次 //附带参数 string jobCode = "SysJob"; string jobCode2 = "SpeackJob"; JobDataMap map = new JobDataMap { }; DateTimeOffset time = QuartzUtil.AddJob<SysJob>(jobCode, CronTime, map);//定时任务一 DateTimeOffset time2 = QuartzUtil.AddJob<SpeackJob>(jobCode2, CronTime, map);//定时任务二 Console.ReadKey(); } public class SysJob : IJob { /// <summary> /// 执行函数 /// </summary> /// <param name=

quartz 时间配置

心不动则不痛 提交于 2019-11-30 12:50:17
Quartz中时间表达式的设置-----corn表达式 (注:这是让我看比较明白的一个博文,但是抱歉,没有找到原作者,如有侵犯,请告知) 时间格式: <!-- s m h d m w(?) y(?) -->, 分别对应: 秒>分>小时>日>月>周>年, 举例: 1.每天什么时候执行: <value>0 59 23 * * ?</value>: 如下为每天23:59:00开始执行 <value>0 1,2,3 11,12 * * ? </value>: 每天11:01,11:02,11:03; 12:01,12:02,12:03分执行任务 2.每隔多久执行: 汇总说明: Cron表达式的时间字段除允许设置数值外,还可使用一些特殊的字符,提供列表、范围、通配符等功能,细说如下: ●星号(*):可用在所有字段中,表示对应时间域的每一个时刻,例如,*在分钟字段时,表示“每分钟”; ●问号(?):该字符只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于点位符; ●减号(-):表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12; ●逗号(,):表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五; ●斜杠(/):x/y表达一个等步长序列,x为起始值,y为增量步长值。如在分钟字段中使用0/15,则表示为0,15

实现分布式锁技术:Redisson

梦想与她 提交于 2019-11-30 12:25:19
1. 需求   Spring分布式项目涉及到定时任务,目前解决方案:(1)集成quartz;(2)集成redisson,由于集成quartz需要涉及到数据库及表,redisson基于redis实现的,比较方便。   相关文档可以查看GitHub上redisson项目。 2. 一个简单的例子 RedissonManager:   其他模块调用: 来源: https://www.cnblogs.com/knsbyoo/p/11585749.html

Quartz作业调度入门

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-30 12:13:40
先贴出一些优秀的参考资料: Quartz Quick Start Guide 用 Quartz 进行作业调度 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制,其托管在github的地址为: https://github.com/quartz-scheduler/quartz 。 一.引入Quartz的jar包 我们一贯采用maven的方式来引入jar包,包括quartz和logback(方便看日志),pom文件里的配置为: <dependencies> <!-- quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <!-- log --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.0</version> </dependency> </dependencies> 二.配置quartz.properties文件 Quartz的优点之一是没有Spring也可以使用

Quartz教程--快速入门

試著忘記壹切 提交于 2019-11-30 12:13:26
欢迎来到quartz快速入门教程。阅读本教程,你将会了解: quartz下载 quartz安装 根据你的需要,配置Quartz 开始一个示例应用 当熟悉了quratz调度的基本功能后,可以尝试一些更高级的特性,比如 Where ,这个一个企业级功能,可以让job和trigger运行在指定的,而不是随机的Terracotta客户端上。 下载和安装 首先, 下载最新的稳定版 - 不用注册。解压并安装。 Quartz jar文件 quartz安装包根目录的lib/目录下有很多的jar包。其中,quartz-xxx.jar(其中xxx是版本号)是最主要的。为了使用quartz,必须将该jar包放在应用的classpath下; 下载后,解压,然后将quartz-xxx.jar放到你的应用中。 我主要是在应用服务器的环境中使用quartz,所以一般将quartz jar包放到应用中(.ear或.war)。当然,如果你希望在很多应用中使用quartz,将quartz的jar包放在应用服务器(appserver)的classpath下即可。如果你只是希望在独立的应用中使用quartz,将quartz的jar包和你的应用依赖的其它jar包放在一起即可。 quzrtz依赖一些第三方的库(以jar包的形式),这些库位于quartz安装包的 lib 目录下。要使用quartz的所有功能

(翻译)Quartz官方教程——第十课:配置,资源使用和SchedulerFactory

断了今生、忘了曾经 提交于 2019-11-30 12:13:04
Quartz的架构是模块化的,因此为了让它运行几个组件需要“拼凑”在一起。幸运的是,有一些类可以帮助你做到这一点。 在Quartz开始工作之前需要配置的主要组件有: ThreadPool JobStore DataSources(如果必要的话) Scheduler本身 ThreadPool 提供了Quartz执行任务时需要使用的线程。线程池中的线程越多,可以并发执行的任务数就越大。但是,太多的线程可能会让系统崩溃。大多数Quartz用户发现大约5个线程就足够用——因为它们在任何时候的任务都不超过100个,而且这些工作通常不会同时运行且运行的很快。其他用户发现他们需要10个、15个、50个甚至100个线程——因为他们有成千上万的触发器且最终每刻大概有10~100个任务同时执行。你的线程池的合适大小完全取决于你要如何使用调度器。这个没有真正的规则,除了保持尽可能小的线程数量(为了节省机器资源)——但是确保你又足够的线程让你的任务去触发运行。请注意,如果触发器的触发时间到了,并且没有可用线程,则Quartz将阻塞(暂停),直到线程可用,然后执行作业——比它应该执行的时间晚数毫秒。这甚至可能导致线程misfire——如果等待时间超过了配置的“misfire threshold”。 ThreadPool接口在org.quartz.spi包中定义

(翻译)Quartz官方教程——第十一课:高级(企业)功能

你离开我真会死。 提交于 2019-11-30 12:12:28
集群 目前集群可以运行在JDBC-Jobstore (JobStoreTX o或者JobStoreCMT) 和TerracottaJobStore中。集群的特性包括负载均衡和故障转移(如果JobDetail的“request recovery”标识被设置为true)。 ####通过设置“org.quartz.jobStore.isClustered”属性为true,就可以在JobStoreTX 或者 JobStoreCMT中开启集群模式。集群中的每个实例都需要使用相同的quartz.properties配置文件。在这些配置文件中有几个可以不同的属性:线程池的大小以及 “org.quartz.scheduler.instanceId”的值。集群中的每个节点都必须有一个唯一的实例ID,通过将这个属性设置为“AUTO”可以很容易的完成这件事情(而不需要频繁修改配置文件)。 永远不要在不同的机器上运行集群模式,除非它们的时钟通过某种时间同步服务(守护进程)进行同步(且相互之间的误差不能超过一秒钟)。如果您不熟悉如何操作,请参阅http://www.boulder.nist.gov/timefreq/service/its.htm。 在已经有运行中实例相关联的表上不要再运行新的非集群实例。否则你的数据可能会收到严重的破坏,并且会遇到不稳定的运行结果。 每次触发只有一个节点会运行该任务。