Scheduled

SpringBoot配置定时任务可以直接使用自带的Scheduled,这相当于一个轻量级的Quartz,它可以让我们直接使用注解来完成定时任务的配置。

Scheduled调度时间设置说明

使用Scheduled设置任务调度时间有以下几种方式,可根据实际情况选取一种即可:

//通过fixedRate属性,来设置上一次调度开始后再次调度的延时,fixedRate值的单位为毫秒,此例为每5秒执行1次
//注意:fixedRate只要到达间隔时间就会调度执行,不关心上次任务是否已执行完成,这样就会存在重复执行的风险!
@Scheduled(fixedRate = 5000) //该属性的功效与上面的fixedRate则是相反的,配置了该属性后会等到任务方法执行完成后,达到延迟配置的时间再次执行该方法
@Scheduled(fixedDelay = 5000) //通过cron属性,使用Cron表达式来设置执行时间,此例为每10秒执行1次
//在线Cron表达式生成器:http://cron.qqe2.com/
@Scheduled(cron="*/10 * * * * ?")

别外,可以通过initialDelay属性来设置第一次执行的延迟时间,只是做延迟的设定,并不会控制其他逻辑,需要配合fixedDelay或者fixedRate来使用

//第一次延迟10秒执行,之后每间隔5秒执行一次
@Scheduled(fixedDelay = 5000, initialDelay = 10000)

调度任务(定时任务)实现类

调度任务1

package Scheduler;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date; @Service
public class SchedulingTask1 { private Integer count=0;
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //通过fixedRate属性,来设置上一次调度开始后再次调度的延时,fixedRate值的单位为毫秒,此例为每5秒执行1次
@Scheduled(fixedRate = 5000)
private void process(){
//输出
System.out.println(String.format("第%s次执行任务SchedulingTask1 时间:%s", (++count).toString(), dateFormat.format(new Date())));
}
}

调度任务2

package Scheduler;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date; @Service
public class SchedulingTask2 { private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //通过cron属性,使用Cron表达式来设置执行时间,此例为每10秒执行1次
@Scheduled(cron="*/10 * * * * ?")
private void process(){
//输出
System.out.println(String.format("SchedulingTask2执行... 时间:%s", dateFormat.format(new Date())));
}
}

也可以将SchedulingTask2类中的方法写在SchedulingTask1类中。

调度配置类

@ComponentScan注解的作用就是根据定义的扫描路径,把符合扫描规则的类装配到spring容器中

@EnableScheduling注解开启对计划任务的支持

package Scheduler;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling; @Configuration
@ComponentScan("Scheduler")
@EnableScheduling //通过@EnableScheduling注解开启对计划任务的支持
public class SchedulerConfig {
}

启动类

使用AnnotationConfigApplicationContext可以实现基于Java的配置类(包括各种注解)加载Spring的应用上下文。避免使用application.xml进行配置。相比XML配置,更加便捷。

package com.lgt.demo2;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import Scheduler.SchedulerConfig; @SpringBootApplication
public class Demo2Application { public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(SchedulerConfig.class);
} }

输出结果

第1次执行任务SchedulingTask1 时间:2019-04-15 13:41:33
第2次执行任务SchedulingTask1 时间:2019-04-15 13:41:38
SchedulingTask2执行... 时间:2019-04-15 13:41:40
第3次执行任务SchedulingTask1 时间:2019-04-15 13:41:43
第4次执行任务SchedulingTask1 时间:2019-04-15 13:41:48
SchedulingTask2执行... 时间:2019-04-15 13:41:50
第5次执行任务SchedulingTask1 时间:2019-04-15 13:41:53
第6次执行任务SchedulingTask1 时间:2019-04-15 13:41:58
SchedulingTask2执行... 时间:2019-04-15 13:42:00

spring boot 使用Schedule创建轻量级定时任务的更多相关文章

  1. [转] 使用Spring Boot和Gradle创建项目

    Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的 ...

  2. 使用Spring Boot和Gradle创建AngularJS项目

    Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的 ...

  3. [转]通过Spring Boot三分钟创建Spring Web项目

    来源:https://www.tianmaying.com/tutorial/project-based-on-spring-boot Spring Boot简介 接下来我们所有的Spring代码实例 ...

  4. Spring Boot的快速创建

    一.利用向导快速搭建Spring Boot应用 创建一个controller package com.hoje.springboot.Controller; import org.springfram ...

  5. spring boot 2X中@Scheduled实现定时任务及多线程配置

    使用@Scheduled 可以很容易实现定时任务 spring boot的版本 2.1.6.RELEASE package com.abc.demo.common; import org.slf4j. ...

  6. Spring Boot TImer Schedule Quartz

    Spring Boot 2.X(十二):定时任务-云栖社区-阿里云https://yq.aliyun.com/articles/723876?spm=a2c4e.11155472.0.0.2f8b3a ...

  7. spring boot 之 如何创建spring boot项目

    创建spring boot的方式有非常多,今天我们使用maven来进行创建spring boot项目,因为maven使用的非常广泛,也很好用,很多IDE也都支持maven. 1 创建maven项目 1 ...

  8. spring boot 项目的创建

    一. 进入https://start.spring.io 快速创建项目 二. 利用eclipse sts插件创建项目 1. 安装sts插件 进入https://spring.io/tools3/sts ...

  9. idea 社区版+spring boot+ssm+swagger创建rest api

    新手上路,出了好多错,记录一下 1.创建数据库:springBootSsmTest 2.打开IDEA创建 Spring boot项目:File——New——Project——Spring Assist ...

随机推荐

  1. jquery ui 怎么实现tab标签切换效果

    1.效果图 2.HTML 代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> &l ...

  2. C++笔记之用户定义的转换

    用户定义的转换(User-defined Conversion) 是一种将一个类类型转换为另一种类型的机制 语法 operator conversion-type-idexplicit operato ...

  3. 剑指Offer:重建二叉树【7】

    剑指Offer:重建二叉树[7] 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5 ...

  4. linux CentOS7.2配置LNMP

    转自http://www.centoscn.com/CentosServer/www/2014/0904/3673.html 准备篇: CentOS 7.0系统安装配置图解教程 http://www. ...

  5. platform_set_drvdata()/platform_get_drvdata()/container_of()【转】

    本文转载自:http://blog.csdn.net/angle_birds/article/details/8443695 platform_set_drvdata(struct platform_ ...

  6. STL版 括号匹配(感觉不如之前自己用数组模拟的跑的快)

    数据结构实验之栈四:括号匹配 Time Limit: 1000MS Memory limit: 65536K 题目描述  给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的 ...

  7. LightOJ1197 Help Hanzo —— 大区间素数筛选

    题目链接:https://vjudge.net/problem/LightOJ-1197 1197 - Help Hanzo    PDF (English) Statistics Forum Tim ...

  8. CodeChef Forest Gathering —— 二分

    题目链接:https://vjudge.net/problem/CodeChef-FORESTGA 题解: 现场赛.拿到这题很快就知道是二分,但是一直wa,怎么修改也wa,后来又换了种错误的思路,最后 ...

  9. Emscripten实现把C/C++文件转成wasm,wast(wasm的可读形式),llvm字节码(bc格式),ll格式(llvm字节码的可读形式)并执行wasm

    <一>˙转换 Emscripten实现把C/C++文件转成wasm,wast(wasm的可读形式),llvm字节码(bc格式),ll格式(llvm字节码的可读形式)的步骤: 最新版本的Em ...

  10. template <typename T>模板类定义

    #include "stdafx.h"#include "iostream"#include <ctime>using namespace std; ...