spring boot 使用Schedule创建轻量级定时任务
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创建轻量级定时任务的更多相关文章
- [转] 使用Spring Boot和Gradle创建项目
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的 ...
- 使用Spring Boot和Gradle创建AngularJS项目
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的 ...
- [转]通过Spring Boot三分钟创建Spring Web项目
来源:https://www.tianmaying.com/tutorial/project-based-on-spring-boot Spring Boot简介 接下来我们所有的Spring代码实例 ...
- Spring Boot的快速创建
一.利用向导快速搭建Spring Boot应用 创建一个controller package com.hoje.springboot.Controller; import org.springfram ...
- spring boot 2X中@Scheduled实现定时任务及多线程配置
使用@Scheduled 可以很容易实现定时任务 spring boot的版本 2.1.6.RELEASE package com.abc.demo.common; import org.slf4j. ...
- Spring Boot TImer Schedule Quartz
Spring Boot 2.X(十二):定时任务-云栖社区-阿里云https://yq.aliyun.com/articles/723876?spm=a2c4e.11155472.0.0.2f8b3a ...
- spring boot 之 如何创建spring boot项目
创建spring boot的方式有非常多,今天我们使用maven来进行创建spring boot项目,因为maven使用的非常广泛,也很好用,很多IDE也都支持maven. 1 创建maven项目 1 ...
- spring boot 项目的创建
一. 进入https://start.spring.io 快速创建项目 二. 利用eclipse sts插件创建项目 1. 安装sts插件 进入https://spring.io/tools3/sts ...
- idea 社区版+spring boot+ssm+swagger创建rest api
新手上路,出了好多错,记录一下 1.创建数据库:springBootSsmTest 2.打开IDEA创建 Spring boot项目:File——New——Project——Spring Assist ...
随机推荐
- jquery ui 怎么实现tab标签切换效果
1.效果图 2.HTML 代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> &l ...
- C++笔记之用户定义的转换
用户定义的转换(User-defined Conversion) 是一种将一个类类型转换为另一种类型的机制 语法 operator conversion-type-idexplicit operato ...
- 剑指Offer:重建二叉树【7】
剑指Offer:重建二叉树[7] 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5 ...
- linux CentOS7.2配置LNMP
转自http://www.centoscn.com/CentosServer/www/2014/0904/3673.html 准备篇: CentOS 7.0系统安装配置图解教程 http://www. ...
- platform_set_drvdata()/platform_get_drvdata()/container_of()【转】
本文转载自:http://blog.csdn.net/angle_birds/article/details/8443695 platform_set_drvdata(struct platform_ ...
- STL版 括号匹配(感觉不如之前自己用数组模拟的跑的快)
数据结构实验之栈四:括号匹配 Time Limit: 1000MS Memory limit: 65536K 题目描述 给你一串字符,不超过50个字符,可能包括括号.数字.字母.标点符号.空格,你的 ...
- LightOJ1197 Help Hanzo —— 大区间素数筛选
题目链接:https://vjudge.net/problem/LightOJ-1197 1197 - Help Hanzo PDF (English) Statistics Forum Tim ...
- CodeChef Forest Gathering —— 二分
题目链接:https://vjudge.net/problem/CodeChef-FORESTGA 题解: 现场赛.拿到这题很快就知道是二分,但是一直wa,怎么修改也wa,后来又换了种错误的思路,最后 ...
- Emscripten实现把C/C++文件转成wasm,wast(wasm的可读形式),llvm字节码(bc格式),ll格式(llvm字节码的可读形式)并执行wasm
<一>˙转换 Emscripten实现把C/C++文件转成wasm,wast(wasm的可读形式),llvm字节码(bc格式),ll格式(llvm字节码的可读形式)的步骤: 最新版本的Em ...
- template <typename T>模板类定义
#include "stdafx.h"#include "iostream"#include <ctime>using namespace std; ...