boot定时任务开启和关闭 spring_Spring之定时任务实践

8e8aeca3a40fbb81bf2033ed50289e86.png

Java下的定时任务实现有Timer,Spring,QuartZ等,这里我们介绍Spring中定时任务的应用,其通过 @Scheduled 注解即可轻松实现

概述

Spring 的定时任务可以支持各种形式的定时调度任务。其通过加在定时方法上的 @Scheduled 注解来配置任务执行周期,还需要在SpringBoot1Application启动类上添加 @EnableScheduling 注解来使能定时任务(如下所示),否则定时任务将无法执行

    @SpringBootApplication@EnableScheduling   // 使能定时任务public class SpringBoot1Application {public static void main(String[] args) {SpringApplication app = new SpringApplication(SpringBoot1Application.class);app.run(args);}}

@Scheduled(fixedRate = msNum )

fixedRate 指定定时任务开始调用的时间间隔(单位为ms),示例如下所示:定时任务每5s调用一次

    @Componentpublic class ScheduledTaskDemo {@Scheduled(fixedRate = 5000)public void scheduledTask1() {System.out.println("Scheduled Task 1 Start: " + new Date());try{Thread.sleep(3000);} catch (Exception e) {System.out.println();}System.out.println("Scheduled Task 1 End:   " + new Date());System.out.println();}}

从下图的调用结果可以看出,定时任务如我们所配置的那样,每5秒调用一次:

1fcce62eab5070e14faea7046b128a57.png

@Scheduled(fixedDelay = msNum)

fixedDelay 指定定时任务从本次调用结束到下一次开始调用的时间间隔(单位为ms),示例如下所示:

    @Componentpublic class ScheduledTaskDemo {@Scheduled(fixedDelay = 5000)public void scheduledTask2() {System.out.println("Scheduled Task 1 Start: " + new Date());try {Thread.sleep(3000);} catch (Exception e) {System.out.println();}System.out.println("Scheduled Task 2 End:   " + new Date());System.out.println();}}

定时任务在结束5秒后即开始下一次调用:

a2ef2bd31d743fcdb37c82355104b4aa.png

cron表达式

Spring的@Scheduled注解同时也支持cron表达式,实现更复杂的定时配置。其由6个字段组成,使用空格进行分隔

  1. : 取值范围: 0~59
  2. : 取值范围: 0~24
  3. : 取值范围: 0~23
  4. : 取值范围: 1~31
  5. : 取值范围: 1~12,JAN~DEC(大小写不敏感)
  6. 星期: 取值范围: 0~7(0为周日,1为周一,...,7为周日),SUN~SAT(大小写不敏感)

取值表示方法

  • , : 表示该字段多个有效值。即,当'秒'字段为10,30,50,表示秒为10、30、50时生效
  • init/step : init为该字段的有效初值,step为步长。即,当'秒'字段为10/20时,表示秒为10、30(10+20)、50(30+20)时生效,其等同于10,30,50
  • - : 表示该字段均有效的取值范围。即,当'月'字段为1-3,表示月为1、2、3时生效
  • * : 表示该字段的所有值均有效。即,当'月'字段为 * ,表示每个月均生效
  • ? : 表示该字段无效,只能应用在日和星期字段。由于星期字段同时使用会发生冲突,故只能使用一个生效,另一个则使用 ?

cron表达式示例:

13/30 0,3 * * * ? : 每小时的0分13秒、0分43秒、3分13秒、3分43秒 34 2 3-5 * * * ? : 每天的3点2分34秒、4点2分34秒、3点2分34秒 0 0 3 4 5 ? : 每年5月4日的3点0分0秒 0 0 3 ? * 6 : 每月周六的3点0分0秒

测试用例

    @Componentpublic class ScheduledTaskDemo {@Scheduled(cron = "11/10 * 16-20 * * ?")public void scheduledTask3() {System.out.println("Scheduled Task 3 Start: " + new Date());try {Thread.sleep(3000);} catch (Exception e) {System.out.println();}System.out.println("Scheduled Task 3 End:   " + new Date());System.out.println();}}

定时任务在每天的16~20点的11、21、31、41、51秒执行:

1b73cf7a01b07357826a4037fccfb175.png

与WebSocket集成问题

之前在我的项目中,已经添加WebSocket功能,然后按照上面的配置定时任务后,会启动失败,抛出如下异常:

org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'defaultSockJsTaskScheduler' is expected to be of type 'org.springframework.scheduling. TaskScheduler' but was actually of type 'org.springframework.beans.factory.support.NullBean'

解决方案:

我们需要手动添加一个Scheduled的配置类来创建一个ThreadPoolTaskScheduler对象,此时项目即可成功启动

    @Configurationpublic class ScheduledConfig {@Beanpublic TaskScheduler taskScheduler() {ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();taskScheduler.setPoolSize(10);taskScheduler.initialize();return taskScheduler;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机怎么取消用户密码,怎么取消开机密码:计算机开机进入Windows时的开机密码怎么取消?...

优质回答 回答者:168长腿欧巴在电脑中的“用户账户”界面即可设置取消开机密码,具体操作请参照以下步骤。1、右键Win10系统的开始菜单,选择弹出菜单里的“运行”选项。2、然后在出现的运行对话框里输入命令“netplwiz”,点击确定。…

echarts symbol 回调函数_【OpenLayer 实战】实现仿Echarts风格的动态迁徙图/航班图

使用的数据还是来自echarts,模拟了全国各地到湖南重点景区的客流情况。分析要实现动态迁徙图的效果,主要需解决两个问题 曲线的绘制。因为给出的数据只有起点和终点两个点位,所以想要绘制曲线可以参考turf中的bezier曲线生成API。 点迹…

校运会计算机科学系大本营,计算机系团总支学生会学期总结大会

(本网讯)时光飞逝,又一个学期即将就此画上了圆满的句号。为推动我系团总支学生会工作更长久的发展,提高学生会干部工作的热情和质量,2016年12月8日晚上19:00在第一教学楼C102课室里,校学生会全体成员齐聚一堂,参加了20…

hexo评论_【前端简历加分】hexo框架搭建个人博客站点,手把手教学

最近,粉丝们在金九银十期间也是不断的面试,有比较多的毕业生说我在这个期间出多一些面试题,上几期都是倾向于面试文章,这期出一次简历加分项操作,使用hexo框架搭建个人博客。作为应届毕业生或者1-3年工作经验的程序员拥…

电脑抓整个路由器的包_网络是电竞游戏体验的命脉 2018年年度电竞路由器功能盘点...

2018年是电竞路由器的元年,从2017年的概念产品诞生开始,电竞路由器很快就确定了品类,随着《绝地求生》、《王者荣耀》等对网络质量敏感的竞技游戏的火爆,电竞路由器迅速被竞技玩家熟知,并在2018年以野火燎原的速度发展…

dos 改某个目录下所有文件的时间_go语言入门学习笔记(2)-DOS操作及go语言变量学习...

API:application program interface:应用程序编程接口。就是我们go的各个包的各个函数。我们想要了解这些函数我们可以通过Go的中文网在线标准库文档:https://studygolang.com/pkgdocDOS介绍:Dos:Disk Operating System 磁盘操作系…

计算机科学与技术专业机遇与挑战,科学网—填报专业大类志愿:机遇与挑战 - 雒运强的博文...

2020年的高考结束了,不久就要出分,接着考生就要选择大学和专业了。可是,有一些大学说按专业大类招生,究竟什么是专业大类、这样招生好不好呢?专业大类有很多,如中国语言文学、历史学、考古学、戏剧影视文学…

es multi match_PHP 的ES搜索操作

原文:https://blog.csdn.net/JineD/article/details/106650695首先从ES的支持的字段说起,ES文档中字段有多种类型 官方文档。这几个比较常用:text,keyword,integer,float,boolean,object,geo_point(地理坐标),geo_shape(描述地理区域),date.注…

美术学考计算机,艺术设计专业能跨专业考计算机研究生吗?

首先说明一下,除了一些专业壁垒比较高的学科和专业强烈不建议跨学科或者跨专业考研,其他的专业原则上都是可以跨专业考的。哪些算是专业壁垒比较高呢:医学、艺术类(包括音乐、美术等和设计类)、体育类、外语类、军事类。其余的对于想要跨理工…

git 怎么还原历史版本_4. Git--修改/回退等操作

》》点赞,收藏关注,理财&技术不迷路《《我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容:Git is a distri…

为什么用python写爬虫_零基础,是怎么开始写Python爬虫的

刚开始接触爬虫的时候,简直惊为天人,十几行代码,就可以将无数网页的信息全部获取下来,自动选取网页元素,自动整理成结构化的文件。利用这些数据,可以做很多领域的分析、市场调研,获得很多有价值…

行列式的计算机应用论文结论,【计算机应用论文】建筑耗能计算机模拟分析(共3654字)...

本文作者:王芙蓉、文亮、王涛 单位:西安建筑科技大学建筑学院、中国建筑设计研究院1(略)利用计算机模拟,能够弥补传统设计方法对建筑能耗分析的不足,帮助建筑师直观地判断方案设计对于建筑能耗的影响,从而将建筑能耗成…

datatable怎么根据两列分组_谈谈怎么做服务隔离

来源于公众号孤独烟 ,作者孤独烟引言OK,如下图所示那显而易见,做服务隔离的目的就是避免服务之间相互影响。毕竟谁也不能说自己的微服务百分百可用,如果不做隔离,一旦一个服务出现了问题,整个系统的稳定性都…

position: absolute;_前端性能优化--transform与position

上个星期去yy语音面试&#xff0c;就有一个这样问题&#xff1a; transform与position:absolute 有什么区别? 我回家后查资料发现这道题目其实不简单啊&#xff0c;涉及到重排、重绘、硬件加速等网页优化的知识。首先看一个用top、left实现的动画效果<style>html,body {…

台式计算机总是重启,台式电脑经常自动重启怎么修复

当我们的电脑出现了电脑自动重启的时候&#xff0c;我们就要注意了&#xff0c;说明我们的电脑主机出现问题了&#xff0c;怎么解决呢。下面是学习啦小编为大家整理的关于台式电脑经常自动重启的相关资料&#xff0c;希望对您有所帮助!台式电脑经常自动重启的解决方法方法/步骤…

gan处理自己的数据集_用GAN生成差分隐私数据集

说在前面今天看了 Generating Differentially Private Datasets Using GANS&#xff0c;明天要讨论。老师不知道从哪里挖出了这篇被拒了的文&#xff0c;研究的主题和我们最近的工作非常相关&#xff0c;而且证明非常有趣&#xff0c;大致地看了一下文章的结构觉得没啥问题&…

ipython安装成功后用不了_ipython安装避坑指南

python学习笔记03 本来想着继续给大家介绍python的数据类型&#xff0c;但是IDLE编辑器&#xff08;默认的 Python shell 编辑器&#xff09;太难用了&#xff0c;导致小编没水出来&#xff0c;所以小编决定装一个别的python shell编辑器&#xff0c;这就是ipython&#xff1b;…

如果用户计算机已接入,01计算机基础知识题(50道)

7、在Windows2000中&#xff0c;切换到MS&#xff0d;DOS方式后&#xff0c;返回Windows2000的命令是。8、在“我的电脑”窗口中用鼠标双击“软盘A”图标&#xff0c;将会。习题参考答案三、填空题1&#xff0e;启动 2&#xff0e;软键盘 3&#xff0e;硬盘 4&#xff0e;弹出式…

k1658停运_最新通知!福州这些列车停运!

停运列车1.4月1日至4月7日太原开k903次&#xff0c;4月3日至4月9日厦门北开k904次停运。2.4月1日至4月8日广州东开k297次&#xff0c;4月2日至4月9日厦门北开k298次停运。3.4月4、5、7日厦门开D6214次、福州开D6229次、厦门开D6224次&#xff0c;4月5、6、8日福州开D6219次、厦…

线程执行完之后会释放吗_java多线程并发:CAS+AQS+HashMap+volatile+ThreadLocal,乐分享...

CyclicBarrier、CountDownLatch、Semaphore 的用法CountDownLatch(线程计数器 )CountDownLatch 类位于 java.util.concurrent 包下&#xff0c;利用它可以实现类似计数器的功能。比如有一个任务 A&#xff0c;它要等待其他 4 个任务执行完毕之后才能执行&#xff0c;此时就可以…