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的更多相关文章

  1. Spring @Scheduled应用解析

    最近,遇到的一个需求,需要执行定时任务,每个一定时间需要执行某个方法 因为项目是SpringMVC的项目,所以使用的是Spring @Scheduled(由于quartz应用起来太麻烦,所以没有采用) ...

  2. spring计划任务,springMvc计划任务,Spring@Scheduled,spring定时任务

    spring计划任务,springMvc计划任务,Spring@Scheduled,spring定时任务 >>>>>>>>>>>> ...

  3. 实现运行在独立线程池的调度功能,基于Spring和Annotation

    使用Spring的注解(@Scheduled)声明多个调度的时候,由于其默认实现机制,将导致多个调度方法之间相互干扰(简单理解就是调度不按配置的时间点执行). 为了解决该问题尝试了修改线程池大小,但是 ...

  4. 使用轻量级Spring @Scheduled注解执行定时任务

    WEB项目中需要加入一个定时执行任务,可以使用Quartz来实现,由于项目就一个定时任务,所以想简单点,不用去配置那些Quartz的配置文件,所以就采用了Spring @Scheduled注解来实现了 ...

  5. Spring的annotation用在set方法上 hibernate的annotation用get方法上

    1.Spring的annotation用在set方法上 2.hibernate的annotation用在get方法上

  6. 定时任务 spring @Scheduled注解

    使用spring @Scheduled注解执行定时任务: 运行!!! 关于Cron表达式(转载) 表达式网站生成: http://cron.qqe2.com/  直接点击 cronExpression ...

  7. Spring 配置 Annotation <context:annotation-config> 和 <context:component-scan>标签的诠释及区别

    Spring 开启Annotation <context:annotation-config> 和 <context:component-scan>诠释及区别 <cont ...

  8. spring,spring mvc之所以起作用是因为开启了注解解释器,即spring的annotation on

    spring,spring mvc之所以起作用是因为开启了注解解释器,即spring的annotation on

  9. spring @Scheduled注解执行定时任务

    以前框架使用quartz框架执行定时调度问题. 这配置太麻烦.每个调度都需要多加在spring的配置中. 能不能减少配置的量从而提高开发效率. 最近看了看spring的 scheduled的使用注解的 ...

随机推荐

  1. day02-业务服务监控

    提供大量第三方工具,可以开发企业级服务监控平台,本章涉及文件与目录差异对比.HTTP质量监控.邮件告警等内容一.文件内容差异比对1.示例1 d = difflib.Differ() diff = d. ...

  2. python-网络安全编程第八天(实战高精度密码字典生成器)

    前言 emmmm 高精度密码字典源码 1.py import exrex import sys #url过滤处理 def host_para(host): if '://' in host: host ...

  3. 深度分析:Java 静态方法/变量,非静态方法/变量的区别,今天一并帮你解决!

    静态/非静态 方法/变量的写法 大家应该都明白静态方法/字段比普通方法/字段的写法要多一个static关键字,简单写下他们的写法吧,了解的可以直接略过 class Test{ // 静态变量 publ ...

  4. 插件SimSynth合成器功能介绍

    本章节采用图文结合的方式给大家介绍下电音编曲软件"水果"FL Studio中SimSynth合成器的功能介绍,感兴趣的朋友可以一起进来沟通交流哦. SimSynth插件是FL St ...

  5. 思维导图软件iMindMap怎么使用

    人人都说,思维导图记忆法实用.可是,我们应该如何使用思维导图呢?又该如何从思维小白摇身一变成为逻辑大神呢?俗话说,心急吃不了热豆腐,让我们一步一步来,慢慢接触使用思维导图吧. 小编作为"过来 ...

  6. spring框架:(一) 技术说明(技术介绍,技术优势以及发展史等)

    一.技术说明(技术介绍,技术优势以及发展史等) 1.1.什么是spring 1.2.spring由来(发展历程) 1.3.spring核心 1.4.spring优点 1.5.spring体系结构 1. ...

  7. 浅谈树链剖分 F&Q

    这是一篇迟来的博客,由于我懒得写文章,本篇以两个问题阐述笔者对树链剖分的初步理解. Q1:树链剖分解决什么问题? 树链剖分,就是把一棵树剖分成若干连续的链,将这些链里的数据映射在线性数组上维护.比方说 ...

  8. MySql学习笔记--详细整理--上

    目录 MySql MySql安装 连接数据库 操作数据库 数据库的列类型 数据库的字段属性 创建数据库 修改删除表 数据管理 外键 DML语言 添加 修改 删除 DQL查询数据(重点) 查询 去重 w ...

  9. 用FL Studio制作反向人声音效(Vocal Chops)

    人声切片在各类电子音乐中都被广泛运用,在FL Studio20中我们也可以运用其自带的插件来制作属于我们自己的人声切片效果.在学完这篇文章后你就可以动手做出如Kygo.Martin Garrix等大牌 ...

  10. mq消息

    同步,异步,单向 Message的扩展属性主要包含下面几个: tag:消息tag,用于消息过滤 keys:Message索引键,用多个空格隔开,可以根据这些key快速检索到消息 waitStoreMs ...