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. 面试腾讯,字节跳动,华为90%会被问到的HashMap!你会了吗?

    简介 HashMap是平常使用的非常多的,内部结构是 数组+链表/红黑树 构成,很多时候都是多种数据结构组合. 我们先看一下HashMap的基本操作:   new HashMap(n); 第一个知识点 ...

  2. 【基于Puppeteer前端自动化框架】【二】PO模式,断言(如何更简便逻辑的写测试代码)

    一.概要 前面介绍了Puppeteer+jest+TypeScript做UI自动化,但是这知识基础的,我们实现自动化要考虑的很多,比如PO模式,比如配置文件,比如断言等等.下面就来一一实现我是怎么用p ...

  3. Linux禅道升级教程

    环境: centos7 禅道11.2升级道12.4 稳定版 下载: sudo wget https://www.zentao.net/dl/ZenTaoPMS.12.4.stable.zip 解压: ...

  4. http host头攻击漏洞

    原文地址: https://www.zhuyilong.fun/tech/handel_httphost_attack.html 漏洞描述 为了方便的获得网站域名,开发人员一般依赖于HTTP Host ...

  5. 小米死磕硬核技术,将扩招5000名工程师,多个领域会使用到C++

    小米MIDC大会2020在北京小米科技园召开,小米集团创始人.集团董事长兼CEO雷军宣布:"重视人才队伍的建设.人才是创新之源,提升技术实力的第一步,就是聚拢最顶尖的人才.小米2021年将在 ...

  6. Spring mvc与springboot

    org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration: viewResolver 类路径文件 把类路径下 ...

  7. 装饰模式(Decorator Pattern)

    代理模式:动态地给一个对象添加一些额外的职责,它比生成子类方式更为灵活. 优点:在某些时候装饰模式比继承(inheritance)要更加灵活 装饰模式的组成 (1)抽象组件:定义一个抽象接口,来规范准 ...

  8. VisualStudio 编写汇编代码相关设置

    VS编写汇编代码方法 新建空项目,不创建解决方案 项目右键,Build Customizations,选择masm 新建源文件,后缀为.ASM 编写代码 .386 ; Tells MASM to us ...

  9. sqli-labs-master less06

    第六关与第五关步骤无区别,请参考 sqli-labs-master less05 及 Burp Suite暴力破解示例 区别:在第二步判断注入类型时发现 加单引号与不加单引号没有区别,加双引号时报错, ...

  10. passwrod和shadow文件介绍

    1./etc/passwd #cat /etc/passwdroot:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbi ...