SpringBoot——基于Spring Task实现定时任务

目录

定时任务

项目总结

新建一个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. 首先,在 Spring Boot 主类中添加 @EnableScheduling 注解以启用定时任务
  2. 然后,创建一个包含定时任务方法的类,并使用 @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);
	}

}

 启动项目:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戏拈秃笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值