任务调度

任务调度springTask和cron表达式

寵の児 提交于 2019-12-10 15:15:53
文章目录 一、常用的任务调度框架和区别 常用框架 区别 1、相同点: 2、Quartz 3、Task: 4、总结: 二、springTask入门dmeo 三、项目中实战案例 1.秒杀商品列表的增量更新 2.过期秒杀商品的移除 四、 cron标识和例子 cron表达式格式 cron表达式例子 五、在线cron生成器 一、常用的任务调度框架和区别 常用框架 在企业级应用中,经常会制定一些“计划任务”,即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作。常见的任务调度框架有Quartz和SpringTask等。 区别 1、相同点: 两者均能实现定时调度任务 2、Quartz ① 默认多线程异步执行 ② 单个任务时,在上一个调度未完成时,下一个调度时间到时,会另起一个线程开始新的调度。业务繁忙时,一个任务会有多个调度,可能导致数据处理异常。 ③ 多个任务时,任务之间没有直接影响,多任务执行的快慢取决于CPU的性能 ④ 触发方式 : (1)SimpleTrigger (2)CronTrigger ⑥ 能被集群实例化,支持分布式部署 ⑦使用JobStoreCMT(JDBCJobStore的子类),Quartz 能参与JTA事务;Quartz 能管理JTA事务(开始和提交)在执行任务之间,这样,任务做的事就可以发生在JTA事务里。 3、Task: ①

Spring Task 任务调度(定时器)

心不动则不痛 提交于 2019-12-10 13:37:52
1. 任务调度 SpringTask 1.1 什么是任务调度 在企业级应用中,经常会制定一些“ 计划任务 ” ,即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 。常见的任务调度框架有 Quartz 和 SpringTask 等。 1.2指定定时器注解 @Scheduled(cron = "*/5 * * * * ?") 应将此类加载进spring容器中 1.3 Cron 表达式 1.3.1 Cron 表达式格式 Cron 表达式是一个字符串,字符串以 5 或 6 个空格隔开,分为 6 或 7 个域,每一个域代表一个含义, Cron 有如下两种语法格式: ( 1 ) Seconds Minutes Hours DayofMonth Month DayofWeek Year ( 2 ) Seconds Minutes Hours DayofMonth Month DayofWeek 每一个域可出现的字符如下: Seconds: 可出现 ", - * /" 四个字符,有效范围为 0-59 的整数 Minutes: 可出现 ", - * /" 四个字符,有效范围为 0-59 的整数 Hours: 可出现 ", - * /" 四个字符,有效范围为 0-23 的整数 DayofMonth: 可出现 ", - * / ? L W C" 八个字符

Play源码深入之五:Job模块的原理

廉价感情. 提交于 2019-12-10 09:08:29
先看play.jobs.JobsPlugin。 public void onApplicationStart() { int core = Integer.parseInt(Play.configuration.getProperty("play.jobs.pool", "10")); executor = new ScheduledThreadPoolExecutor(core, new PThreadFactory("jobs"), new ThreadPoolExecutor.AbortPolicy()); } 在onAppliactionStart()方法中,实例化一个ScheduledThreadPollExecutor做executor。 接受afterApplicationStart事件中,才会处理Job。 public void afterApplicationStart() { List> jobs = new ArrayList>(); for (Class clazz : Play.classloader.getAllClasses()) { if (Job.class.isAssignableFrom(clazz)) { jobs.add(clazz); } } scheduledJobs = new ArrayList(); for (final

几种任务调度的 Java 实现方法与比较1——阅读

爷,独闯天下 提交于 2019-12-09 14:02:46
综观目前的 Web 应用,多数应用都具备任务调度的功能。本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺点进行比较,目的在于给需要开发任务调度的程序员提供有价值的参考。 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。本文由浅入深介绍四种任务调度的 Java 实现: Timer ScheduledExecutor 开源工具包 Quartz 开源工具包 JCronTab 此外,为结合实现复杂的任务调度,本文还将介绍 Calendar 的一些使用方法。 Timer 相信大家都已经非常熟悉 java.util.Timer 了,它是最简单的一种实现任务调度的方法,下面给出一个具体的例子: package org.js.test; import java.util.Date; import java.util.Timer; import java.util.TimerTask; /** * Created with IntelliJ IDEA. * User: dev02 * Date: 16-1-27 * Time: 下午2:55 * To change this template use File | Settings | File Templates. */

Linux - cron - 基础

安稳与你 提交于 2019-12-09 13:24:05
概述 cron 相关的理解与使用 背景 最近实在没啥写的了 我写东西, 一般是是这些 看了书过后, 做一些系统的整理 比如之前的 docker 和 git 系列 遇到了实际问题, 解决过程也不是那么顺利, 中间经历了一些求助与试错 一般就是先看异常, 再去百度, 找到有网友的解决方案, 自己照着做一遍, 然后洗稿... 最近在回顾 jojo 的奇妙冒险 里面一众时间系的能力, 让我大呼牛逼 于是, 在这个暂时找不到东西写的时间里, 我决定写一下 cron 兄弟, 能划水的东西写一个, 少一个, 你得加紧看书啊.. 回想起早年的一些遗留问题 我用 cron, 用 crontab 命令写配置 能用但是查不到配置 我同事直接在 /etc/crontab 下写配置 当然能用 还比我的简单 是时候整理一下了 准备 os centos 7 1. 一些场景 概述 列举一些场景 场景 我想在 某个特定的时间, 做某件事 比如 在 2019-12-31 23:59:59, 打印一句 Goodbye 2019 在 2019-12-07 22:42:18, 定时开机 你这是在为难我 linux 不过定时关机, 貌似是可以 我想在 按照某个特定的频率, 执行某个操作 比如 在 每一秒, 打印一下当前时间 在 每分钟的 30 秒, 打印时间 在 每小时的 30 分, 打印时间 在 每一天的 18 点,

Net定时器 【转载】

你说的曾经没有我的故事 提交于 2019-12-06 16:14:45
【转载】 Timer Timer是.NET内置的定时器类,它位于命名空间 System.Timers 下。Timer是一个基于服务器端的计时器,提供了 Interval 属性来设置重复触发定时任务的间隔(单位为毫秒),触发事件则由 Elapsed 事件来指定。另外,还可以通过 AutoReset 属性来设置Timer的 Elapsed 事件只触发一次或者重复触发。 官方地址: https://docs.microsoft.com/en-us/dotnet/api/system.timers.timer?view=netframework-4.8 特性 轻量,简单易用 .NET框架内置,无须引用第三方库 不支持Cron表达式 FluentScheduler FluentScheduler是由一位巴西的.NET开发者 Talles L 开发并维护的.NET平台下的一款自动定时任务调度器组件,它提供了比较丰富的定时任务调度接口,开发者可以快速方便地通过接口设置调度时间,比如:间隔1秒,2秒…n秒,只执行一次,哪月的哪一天等等。具体请参考我之前写过的两篇关于FluentScheduler的文章: 《推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件—FluentScheduler》 《简单、轻量、功能非常强大的C#/ASP.NET定时调度任务执行管理组件

Linux 添加定时任务

为君一笑 提交于 2019-12-06 12:26:20
crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。 Linux下的任务调度分为两类,系统任务调度和用户任务调度。 系统任务调度 系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。 使用cat /etc/crontab 查看文件内容。 有五颗星星星提示。每颗星对应的解释以及很清楚了。 前四行是用来配置crond任务运行的环境变量 第一行SHELL变量指定了系统要使用哪个shell,这里是bash 第二行PATH变量指定了系统执行命令的路径 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户 第四行HOME变量指定了在执行命令或者脚本时使用的主目录。 下面的星号,星号(*):代表所有可能的值,如month字段为星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 如果是具体的值,可以使用下面的符号匹配。 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7

springboot集成schedule(深度理解)

我的未来我决定 提交于 2019-12-06 08:40:34
背景 在项目开发过程中,我们经常需要执行具有周期性的任务。通过定时任务可以很好的帮助我们实现。 我们拿常用的几种定时任务框架做一个比较: 从以上表格可以看出,Spring Schedule框架功能完善,简单易用。对于中小型项目需求,Spring Schedule是完全可以胜任的。 1、springboot集成schedule 1.1 添加maven依赖包 由于Spring Schedule包含在spring-boot-starter基础模块中了,所有不需要增加额外的依赖。 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>    1.2 启动类,添加启动注解 在springboot入口或者配置类中增加@EnableScheduling注解即可启用定时任务。

不要把分层当做解耦!

大城市里の小女人 提交于 2019-12-05 22:37:27
公司的老员工很喜欢一种他们称之为“解耦”的做法: 先这么进行系统分析:把系统运行拆解为若干个环节,先执行A,再执行B,形成一个一个的步骤。 然后进行“解耦”:把每个环节变成一个服务,环节之间用 MQ 连接。环节衔接的输入输出数据形成协议规范。 “解耦”之后得到的好处是: 环节用MQ串联,当服务死掉后,MQ能存储消息,等服务重启可以继续执行;当MQ无法消化时,可以为这个环节的服务增加机器;当这个环节的服务饱和时,可以裁剪人员。 这套“解耦”的办法和部门划分一脉相承,部门人员富裕就裁剪,工作量完不成就加入,公文始终堆在那儿。 程序员的特点是手里有锤子到处找钉子,凡是看到系统没有这么分割的,他们就认为“解耦不充分”。程序人生就是不断复制这个模型的人生。 很多公司的架构也停留在这种软件设施级别的架构:如何实施 KAFKA,如何上SPARK,如何玩ZOOKEEPER等等,妄图通过引入这些灵丹妙药改变世界。 然而效果如何呢?由于涉及公司内部系统,保密起见这里不做展开,简单的说,系统烂的一比! 为什么会演变成这样呢? 第一,系统烂源于业务架构识别不当。 如权限方面,本人在05年就搞组织机构无限划分,而这套系统里公司都是平齐的,难道它们都搞扁平化管理了? 权限不是目前系统的核心业务,本系统核心业务对象识别的也一塌糊涂,但涉及公司业务这里不展开。 我认为,系统分析能力主要指的是业务架构的能力