目录
定时任务
项目总结
新建一个SpringBoot项目
pom.xml无需引入依赖
SpringTaskDemo
SpringbootSpringtaskApplication启动类
定时任务
- 在日常的项目开发中,往往会涉及一些需要做到定时执行的代码,例如自动将超过24小时的未付款的订单改为取消状态,自动将超过14天客户未签收的订单改为已签收状态等。
- 实现定时任务的方式有很多,但最常用的是基于Spring Task实现定时任务的
- 参考文章:http://t.csdnimg.cn/WVoGU
- Spring Task 是 Spring 框架提供的一种用于处理定时任务的机制,Spring Task的核心实现类位于spring-context包中,在Spring项目中可以直接使用该定时任务类,Spring Task还提供了
@Scheduled
注解来支持定时任务的创建和调度
@Scheduled注解支持的部分配置参数:
- cron:cron表达式,指定任务在特定时间执行
- fixedDelay:表示 上一次任务执行完成后多久再次执行,参数类型:long,单位:ms
- fixedDelayString:和fixedDelay含义一样,只是参数类型变成String
- fixedRate:表示按一定的频率执行任务,参数类型:long,单位:ms
- fixedRateString:与fixedRate的含义一样,只是参数类型变成String
- initialDelay:表示延迟多久再第一次执行任务,参数类型:long,单位:ms
- initialDelayString:与initialDelay含义一样,只是参数类型变成String
- zone :时区,默认为当前时区,一般不用
在线生成cron表达式的网站:
- 1、quartz/Cron/Crontab表达式在线生成工具-BeJSON.com
- 2、在线Cron表达式生成器 - 码工具 (matools.com)
项目总结
- 首先,在 Spring Boot 主类中添加
@EnableScheduling
注解以启用定时任务- 然后,创建一个包含定时任务方法的类,并使用
@Scheduled
注解指定定时任务的触发规则
新建一个SpringBoot项目
项目结构:
pom.xml无需引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.study</groupId><artifactId>springboot_springtask</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot_springtask</name><description>Demo project for Spring Boot</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
SpringTaskDemo
package com.study.springboot_springtask.dingshi;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class SpringTaskDemo {//打印日志private Logger logger=LoggerFactory.getLogger(SpringTaskDemo.class);private int fixedDelayCount=1;private int fixedRateCount=1;private int initialDelayCount=1;private int cronCount=1;@Scheduled(fixedDelay = 5000)//表示当前方法执行完毕5000ms后,Spring scheduling会再次调用该方法public void testFixDelay(){logger.info("=========fixedDelay: 第{}次执行方法",fixedDelayCount++);}@Scheduled(fixedRate = 5000)//表示当前方法开始执行5000ms后,Spring scheduling会再次调用该方法public void testFixedRate(){logger.info("=========fixedRate: 第{}次执行方法",fixedRateCount++);}@Scheduled(initialDelay = 1000,fixedRate = 5000)//表示延迟1000ms执行第一次任务public void testInitialDelay(){logger.info("=========initialDelay: 第{}次执行方法",initialDelayCount++);}@Scheduled(cron = "0 15 10 * * ?")//cron接受cron表达式,根据cron表达式确定定时规则,表示:每天10:15定时触发执行public void testCron(){logger.info("=========cron: 第{}次执行方法",cronCount++);}
}
SpringbootSpringtaskApplication启动类
package com.study.springboot_springtask;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication
@EnableScheduling // 开启基于注解的定时任务,发现注解@Scheduled的任务并由后台执行
public class SpringbootSpringtaskApplication {public static void main(String[] args) {SpringApplication.run(SpringbootSpringtaskApplication.class, args);}}
启动项目: