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 磁盘操作系…

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爬虫的

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

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

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

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

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

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

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

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

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

计算机应用基础考查方案,《计算机应用基础》考查方案

《计算机应用基础》考查方案 《计算机应用基础》考核方案 制订人&#xff1a;刘久红老师 计算机应用基础科任教师 制订部门&#xff1a;基础课与思政课教学部 制订时间&#xff1a;2012年12月 一&#xff1a;考核依据 计算机应用基础是面向全院各专业开设的一门重要的公共基础课…

无法启动此程序因为计算机丢失msvcr110.dll,计算机中丢失msvcr110.dll怎么办

我们在打开电脑程序的时候&#xff0c;系统提示无法启动此程序&#xff0c;因为计算机中丢失MSVCR110.dll&#xff0c;尝试重新安装该程序以解决此问题。这是什么情况呢?因为现在所有的5.5环境都是基于vc11的编译脚本下生成的&#xff0c;所以在windows下你得安装相关组件&…

anaconda pandas运行不了_学习python你必须弄懂的 Python、Pycharm、Anaconda 三者之间的关系...

Python作为深度学习和人工智能学习的热门语言&#xff0c;学习一门语言&#xff0c;除了学会其简单的语法之外还需要对其进行运行和实现&#xff0c;才能实现和发挥其功能和作用。下面来介绍运行Python代码常用到的工具总结。一.Python、Pycharm、Anaconda关系介绍1. PythonPyt…

java: 程序包com.alibaba.fastjson不存在_Java开发中的异常

NO.1 Java.alng.NullPointerException这个异常大家肯定都经常遇到&#xff0c;异常的解释是 “程序遇上了空指针 “&#xff0c;简单地说就是调用了未经初始化的对象或者是不存在的对象&#xff0c;这个错误经常出现在创建图片&#xff0c;调用数组这些操作中&#xff0c;比如图…

关于csgo的观看录像fps低_CSGO:Ququ带队击败LQ豪取五连冠,8次MVP闪耀全场

电子竞技热点资讯&#xff0c;敬请关注老年人三旬&#xff01;自从CSGO这款游戏上市之后&#xff0c;在整个FPS领域内就一直处于顶流位置&#xff0c;这款游戏对于所有热爱射击游戏的玩家来说&#xff0c;不但是经典作品《半条命》的延续&#xff0c;更是一款对玩家要求极高的游…

python 3d大数据可视化_基于Python的数据可视化库pyecharts介绍

什么是pyecharts&#xff1f; pyecharts 是一个用于生成 Echarts 图表的类库。 echarts 是百度开源的一个数据可视化 JS 库&#xff0c;主要用于数据可视化。pyecharts 是一个用于生成 Echarts 图表的类库。实际上就是 Echarts 与 Python 的对接。 使用 pyecharts 可以生成独立…

dev多行注释_Python代码注释的用法和意义

01. 注释的作用在大多数编程语言中&#xff0c;注释都是一项很有用的功能。在一些简单的程序中只包含Python代码&#xff0c;但随着程序越来越大、越来越复杂&#xff0c;就应在其中添加说明&#xff0c;对你解决问题的方法进行大致的阐述。注释让你能够使用熟悉的自然语言在程…