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. 如何使用MindManager更改思维导图布局

    思维导图可以帮您直观地捕捉想法和信息,并将其组织起来,进一步创建行动计划,思维导图软件MindManager不仅可以帮您分析问题.使用头脑风暴得出解决方案,还可以规划复杂的项目.下面是MindMana ...

  2. 关于UILabel标签控件的使用小节

    前段时间一直想停下来,总结一下近期在开发中遇到的一些问题顺便分享一下解决问题的思路和方法,无奈人生就像蒲公英,看似自由却身不由己.太多的时间和精力被占用在新项目的开发和之前项目的维护中,总之一句话外包 ...

  3. Problem D. Country Meow 题解(三分套三分套三分)

    题目链接 题目大意 给你n(n<=100)个点,要你找一个点使得和所有点距离的最大值最小值ans 题目思路 一直在想二分答案,但是不会check 这个时候就要换一下思想 三分套三分套三分坐标即可 ...

  4. Mybatis【2】-- 多个mapper文件以及namespace作用

    多个mapper文件以及namespace作用 要是多个mapper文件的时候怎么处理,namespace又是干什么用的呢 首先我们来看创建数据库语句: #创建数据库 CREATE DATABASE ...

  5. java实验类的实现

    1 //1.矩形类的定义及应用 2 package classwork_5; 3 4 public class juxing1 { 5 private double a,b;//长,宽 6 priva ...

  6. mq消息消费,broker选址

    PullRequest.MessageQueue.BrokerName 根据PullRequest.MessageQueue得到brokerId,默认0或者用缓存中的suggest,每次消息拉取后会更 ...

  7. macOS tips

    1.设置常用linux命令的快捷键 打开terminal command+space,搜索"terminal"关键字 进入"~/"目录 cd ~/ touch ...

  8. 《STM32CubeMX配置STM32H743XI工程》第一讲《初始化UART,重定义printf函数,点亮一个LED灯》

    1.打开STM32CubeMX软件->新建一个工程(软件自行到ST官网下载安装) 2.输入对应的芯片型号(本次基于野火STM32H743XI Pro 开发板)点击Start Project生成项 ...

  9. Windows10下的MediaWiki的部署启动

    MediaWiki是使用PHP开发的,PHP是比较成熟的Web脚本语言,要想运行基于PHP的程序,你需要配置PHP的运行环境.MediaWiki使用数据库来保存数据等信息,支持MySQL和Postgr ...

  10. java45

    Collection c2 = new ArrayList(); c2.add("a"); c2.add("b"); //移除集合中的某个元素 c2.remov ...