每天一个Java知识点(spring-计划任务)
1. 开篇
从spring3.1开始,计划任务在spring中的实现变得异常的简单。首先通过配置类注解@EnableScheduling来开启对计划任务的支持,然后在要执行计划任务的方法上注解@Scheduled,声明这是一个计划任务。
spring通过@Scheduled支持多种类型的计划任务,包含cron、fixDelay、fixRate等。
2. 代码示例
a. 计划任务服务类
定时任务服务类
解释:
i. 通过@Scheduled声明该方法是计划任务,使用fixedRate属性每隔固定事件执行;
ii. 使用cron属性可按照指定时间执行,本例指的是每天15点57分执行;cron是UNIX和类UNIX(linux)系统下的定时任务;
b. 配置类
配置类
解释:
i. 通过@EnableScheduling注解开启对计划任务的支持
c. 运行测试类
运行测试类
d. 运行结果
运行结果
e. 报错信息
无需理会的debug级别异常信息
看到这个异常信息很懵逼,很明显这是定时任务的异常,可是定时任务命名能够正常运行啊,怎么回事呢?
尝试删掉所有的定时任务配置,果然异常消失了。但是只要启用任何一个定时任务,异常都会再次出现。一个程序员怎么能容忍异常的出现而不去管它?
大家有没有注意到这两个异常的级别都是debug而不是error。于是经过我千辛万苦地bd。终于得知,原来,spring地定时任务调度器会尝试获取一个注册过地task scheduler来做任务调度,它会尝试通过BeanFactory.getBean地方法来获取一个注册过地scheduler bean,获取地步骤为:
1. 尝试从配置中找到一个TaskScheduler Bean;
2. 寻找ScheduledExecutorService Bean;
3. 使用默认的scheduler
前两步如果找不到地话,就会以debug的方式抛出异常,分别是:
logger.debug(“Could not find default TaskScheduler bean,”ex);
logger.debug(“Could not find default ScheduledExecutorService bean”,ex);
所以,日志中打印出来的两个异常,根本不是什么错误信息,也不会影响定时器的使用,只不过是spring自己打印的一些信息罢了。但是不明白为什么已异常的方式打印出来,也许有什么重要的信息需要提示开发者,具体什么原因,只能有机会进一步去了解了。或者各位看到这篇文章的同学有什么见解,可以在评论区发表一下。
想获取完整面试题及答案的同学请点赞、关注并转发。私信博主:“Java面试题”获取完整资料,更有超全spring、jvm、linux、docker等电子书相送。更有整理的200多页的面试重点知识点,非常全面,需要的私信。
每天一个Java知识点(spring-计划任务)相关推荐
- Spring:一个Java框架15年的演化
作者:刘欣 来自:码农翻身(ID:coderising) 这篇文章来自于Spring创始人之一Juergen Hoeller在2018年的一次演讲(点击阅读原文查看),我觉得很有意思,又加了点儿料呈现 ...
- java 浅堆 深堆_JVM中的一个小知识点:深堆和浅堆的概念
java中的堆内存算是整个内存区域中最重要的一块,几乎所有的对象都分配在堆内存.在堆内存中有两个主要的概念需要我们理解,这对分析java堆内存的故障有着重要的作用,分别是深堆和浅堆. 一.概念 我们先 ...
- 【Java知识点大全】
文章目录 前言 Java基础知识点 计算机基础问题 深拷贝和浅拷贝 伪共享的概念以及如何避免 网络四元组 TCP协议为什么要设计三次握手? HashMap HashMap底层实现 1.7版本和1.8版 ...
- 【转载】JAVA知识点集锦(中)
这部分主要是与Java Web和Web Service相关的面试题. 96.阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运 ...
- 一个java高级工程师的进阶之路【转】
一个java高级工程师的进阶之路[转] 宏观方面 一. JAVA.要想成为JAVA(高级)工程师肯定要学习JAVA.一般的程序员或许只需知道一些JAVA的语法结构就可以应付了.但要成为JAVA(高级) ...
- 给Java新手的一些建议——Java知识点归纳(Java基础部分)
写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给 ...
- spring计划任务
Spring3中加强了注解的使用,其中计划任务也得到了增强,现在创建一个计划任务只需要两步就完成了: 创建一个Java类,添加一个无参无返回值的方法,在方法上用@Scheduled注解修饰一下: 在S ...
- Java知识点总结(Java容器-EnumSet)
Java知识点总结(Java容器-EnumSet) @(Java知识点总结)[Java, Java容器, JavaCollection, JavaSet] EnumSet EnumSet是一个专为枚举 ...
- 自己写一个java.lang.reflect.Proxy代理的实现
前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Pr ...
最新文章
- 设计模式之简单工厂模式(Simply Factory)摘录
- 在Kubernetes v1.8中使用RBAC
- R语言对dataframe(data.table)数据分层随机抽样实战
- 【Java 并发编程】线程锁机制 ( 悲观锁 | 乐观锁 | CAS 三大问题 | ABA 问题 | 循环时间长问题 | 多个共享变量原子性问题 )
- Android异步加载
- GAN for NLP (论文笔记及解读
- C++四种强制类型转换
- 让HTML标签title属性值换行
- mysql 语句 简书_MySQL基本语句
- windows10下搭建spark平台
- 6.2神经网络算法应用上学习笔记
- MySQL导入sql文件的三种方法
- python分词、词频统计以及根据词频绘制词云
- 平头哥RVB2601开发板开发环境CDK
- HDU 1698 Just a Hook(线段树区间更新)
- Git提交合并提交及注释
- C#-获取当前程序集Assembly的文件名
- mysql的prepared_statement
- cad中直径符号不显示_怎么在CAD、Word里敲出直径符号,你会吗?
- 没有网络,也能上网-基于USSD技术的信息服务