Spring @Scheduled Annotation
1.Overview
这里我们将会学习Spring @Scheduled 标签,了解它是如何配置,如何设置定时任务。
关于它的使用,有两点简单的规则需要记住:
※它的方法应该是一个void返回值类型
※它的方法不能接收任何参数
2.配置
如下所示,我们使用注解来进行配置。
1 @SpringBootApplication
2 @EnableScheduling //这个注解开启定时任务的功能
3 public class AppReadCsv {
4 @Autowired
5 JobLauncher jobLauncher;
6
7 @Autowired
8 Job job;
9
10 public static void main(String[] args) {
11 SpringApplication.run(App.class, args);
12 }
13
14 /*
15 * batch job will run every one minute after application is started
16 *
17 * */
18 @Scheduled(cron = "0 */1 * * * ?")
19 public void perform() throws Exception {
20 JobParameters params = new JobParametersBuilder()
21 .addString("JobID", String.valueOf(System.currentTimeMillis()))
22 .toJobParameters();
23 jobLauncher.run(job, params);
24 }
3.Schedule a task at Fixed Delay
上次任务的结束和下次任务的开始,中间的间隔时间是固定的。
1 @Scheduled(fixedDelay = 1000) // millisecond
2 public void scheduleFixedDelayTask() {
3 System.out.println(
4 "Fixed delay task - " + System.currentTimeMillis() / 1000);
5 }
4.Schedule a task at a Fixed Rate
以固定的间隔时间来执行任务
1 @Scheduled(fixedRate = 1000) // millisecond
2 public void scheduleFixedRateTask() {
3 System.out.println(
4 "Fixed rate task - " + System.currentTimeMillis() / 1000);
5 }
上一次任务开始后的一秒,下一次任务开始执行。
注意:下次任务的开始必须等到上次任务的结束,如果上次任务没有结束,那么及时到了设置的一秒间隔时间,那么下次任务也不会开始执行。
如果想要任务并行执行,需要使用@Async标签
1 @EnableAsync
2 public class ScheduledFixedRateExample {
3 @Async
4 @Scheduled(fixedRate = 1000)
5 public void scheduleFixedRateTaskAsync() throws InterruptedException {
6 System.out.println(
7 "Fixed rate task async - " + System.currentTimeMillis() / 1000);
8 Thread.sleep(2000);
9 }
10 }
5.Schedule tasks with initial delay
1 @Scheduled(fixedDelay = 1000, initialDelay = 1000) // millisecond
2 public void scheduleFixedRateWithInitialDelayTask() {
3
4 long now = System.currentTimeMillis() / 1000;
5 System.out.println(
6 "Fixed rate task with one second initial delay - " + now);
7 }
6.Cron Expressions
1 @Scheduled(cron = "0 15 10 15 * ?") // 执行时间 每个月第15天上午10:15执行.
2 public void scheduleTaskUsingCronExpression() {
3
4 long now = System.currentTimeMillis() / 1000;
5 System.out.println(
6 "schedule tasks using cron jobs - " + now);
7 }
表达式的说明:cron = "0 15 10 15 * ?"
<second> <minute> <hour> <day-of-month> <month> <day-of-week> <year> <command>
cron表达式中共有6个字符(space当做分隔符,不算)。分别对应上一行,红字部分。<year>作为可选项。
* 表示All。在month的位置,表示for every month
?表示any。使用在<day-of-month> and <day-of -week> 这两个选项中。
– 表示range 。例如,“10-11” in <hour> 表示 10点和11点
, 表示分隔多个数值 。例如, “MON, WED, FRI” 在 <day-of-week> 表示“Monday, Wednesday, and Friday”
下面举实例说明:
0 0 12 * * ? 2017 2017年每天的12点执行
0 0/5 13,18 * * ? 每天13点和18点的0,5,10,15,20,25,30,35,40,45,50,55分执行
0 15,45 13 ? 6 Tue 6月的每周二13点的15分和45分执行
参考链接:
https://www.baeldung.com/spring-scheduled-tasks
https://www.baeldung.com/cron-expressions
Spring @Scheduled Annotation的更多相关文章
- Spring @Scheduled应用解析
最近,遇到的一个需求,需要执行定时任务,每个一定时间需要执行某个方法 因为项目是SpringMVC的项目,所以使用的是Spring @Scheduled(由于quartz应用起来太麻烦,所以没有采用) ...
- spring计划任务,springMvc计划任务,Spring@Scheduled,spring定时任务
spring计划任务,springMvc计划任务,Spring@Scheduled,spring定时任务 >>>>>>>>>>>> ...
- 实现运行在独立线程池的调度功能,基于Spring和Annotation
使用Spring的注解(@Scheduled)声明多个调度的时候,由于其默认实现机制,将导致多个调度方法之间相互干扰(简单理解就是调度不按配置的时间点执行). 为了解决该问题尝试了修改线程池大小,但是 ...
- 使用轻量级Spring @Scheduled注解执行定时任务
WEB项目中需要加入一个定时执行任务,可以使用Quartz来实现,由于项目就一个定时任务,所以想简单点,不用去配置那些Quartz的配置文件,所以就采用了Spring @Scheduled注解来实现了 ...
- Spring的annotation用在set方法上 hibernate的annotation用get方法上
1.Spring的annotation用在set方法上 2.hibernate的annotation用在get方法上
- 定时任务 spring @Scheduled注解
使用spring @Scheduled注解执行定时任务: 运行!!! 关于Cron表达式(转载) 表达式网站生成: http://cron.qqe2.com/ 直接点击 cronExpression ...
- Spring 配置 Annotation <context:annotation-config> 和 <context:component-scan>标签的诠释及区别
Spring 开启Annotation <context:annotation-config> 和 <context:component-scan>诠释及区别 <cont ...
- spring,spring mvc之所以起作用是因为开启了注解解释器,即spring的annotation on
spring,spring mvc之所以起作用是因为开启了注解解释器,即spring的annotation on
- spring @Scheduled注解执行定时任务
以前框架使用quartz框架执行定时调度问题. 这配置太麻烦.每个调度都需要多加在spring的配置中. 能不能减少配置的量从而提高开发效率. 最近看了看spring的 scheduled的使用注解的 ...
随机推荐
- PHP反序列化漏洞-CVE-2016-7124(绕过__wakeup)复现
前言 最近电脑也不知怎么了时不时断网而且我竟然找不出原因!!!很诡异.... 其他设备电脑都OK唯独我的电脑 时好时坏 我仿佛摸清了我电脑断网的时间段所以作息时间都改变了 今天12点多断网刷了会手 ...
- 基于Pycharm的Python开发环境配置
基于Pycharm的Python开发环境配置 编辑于2020-11-18 Python安装 双击桌面的Python3.x安装包. 勾选Add to path. 方便起见,选择Install now.下 ...
- 【惊喜】Github爆火的java面试神技+java核心面试技术已开发下载,大厂内都传疯了!
前言 今年,由于疫情的影响,很多互联网企业都在缩减招聘成本.作为程序员,原本这两年就面临竞争激烈.年龄危机的问题,而现在的求职局面又完全是企业在挑人的状态. 所以最好能在空闲的时候看看大厂相匹配的技术 ...
- 工作三年终于社招进字节跳动!字节跳动,阿里,腾讯Java岗面试经验汇总
前言 我大概我是从去年12月份开始看书学习,到今年的6月份,一直学到看大家的面经基本上百分之90以上都会,我就在5月份开始投简历,边面试边补充基础知识等.也是有些辛苦.终于是在前不久拿到了字节跳动的o ...
- MathType怎么写分段函数?
分段函数是数学里面特有的一种函数,它是对于自变量x的不同的取值范围,有着不同的解析式的函数.它的特点就是有一个大括号,然后有至少2个函数解析式,写这样的函数离不开专业的公式编辑器,下面就来学习具体编辑 ...
- 利用css3和js实现旋转木马图片小demo
先看效果图: 上源码 html代码 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- cobbler 装机服务
一.Cobbler 安装 $ yum install -y epel-release $ yum install -y cobbler cobbler-web pykickstart debmirro ...
- Istio 之ServiceEntry
使用服务条目资源(ServiceEntry)可以将条目添加到 Istio 内部维护的服务注册表中.添加服务条目后,Envoy 代理可以将流量发送到该服务,就好像该服务条目是网格中的服务一样.通过配置服 ...
- 「考试」联赛模拟36-39,noip晚间小测2-3
36.1 party(CF623D) 很是鸡贼的一道题 首先要明确一点,抓人是有策略,而不是随机的,可以认为等同于按一个给定的顺序猜人,那么这时猜中的概率就只是抓住这个人的概率了 对于每一次猜测,因为 ...
- CentOS7系统tab命令补全
在新安装的CentOS7系统中,如果没有安装命令补全的话,在systemctl管理服务的时候就没法用tab来自动补全,因此在安装完系统后,我们要再安装命令补全这个软件: yum -y install ...