目录
定时任务
项目总结
新建一个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);
	}
}
启动项目:




















