springboot中定时任务(@Scheduled)的用法


springboot中定时任务(@Scheduled)的用法

用于控制任务在某个指定时间执行,或者每隔一段时间执行。一般用在业务层的业务类中

使用前提

需要在启动类添加注解@EnableScheduling,开启定时任务功能,默认是关闭的。

用到注解@Scheduled的方法的类需将此类标记为Spring容器中的一个Bean如业务类添加注解@Service

注解@Scheduled的参数用法

1.@Scheduled(cron = "* * * * * ?")

秒 分 时 日 月 周 年

cron表达式中各个时间元素用空格分隔,至少有6个时间元素(第7个时间元素为年份可写可不写)

cron表达式支持占位符的写法,可以在配置文件或配置服务器中动态调整:

@Scheduled(cron = "${cron}")

常用的通配符说明:

"*" 表示所有值
"-" 表示区间
"?" 表示不指定值
"," 表示指定多个值
"/" 表示增量触发,例如秒元素中的"0/15" 表示从0秒开始,每15秒触发(0,15,30,45)

2.@Scheduled(fixedDelay = 50000, initialDelay = 1000)

参数说明:

fixedDelay = 5*1000 :上一次执行完毕时间点后5秒再次执行
fixedDelayString = "${service.fixed-delay:10000}" : 与fixedDelay作用相同,但表示形式为字符串并支持占位符,可以在配置文件或配置服务器中动态调整,可以设置默认值。
fixedRate = 5*1000 :上一次执行开始时间点后5秒再次执行
initialDelay = 10*1000 :第一次延迟10秒后再执行
上面两个同理可以加String后缀用字符串或者占位符表示参数。

具体实例

启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

/**
 * @author Administrator
 */
@EnableScheduling
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

业务类

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * @author Administrator
 */
@Slf4j
@Service
public class TestSchedulingService {
    @Scheduled(cron = "0/10 * * * * ?")
    public void testTask1() {
        log.info("开始执行测试任务1-每隔10秒运行一次,当前时间为:{}",new Date());
    }

    @Scheduled(fixedDelay = 5*1000, initialDelay = 10*1000)
    public void testTask2() {
        log.info("开始执行测试任务2-延迟10秒后每隔5秒运行一次,当前时间为:{}",new Date());
    }

    @Scheduled(fixedDelayString = "${service.fixed-delay:50000}",initialDelayString = "${service.initial-delay:50000}")
    public void testTask3() {
        log.info("开始执行测试任务3-每隔1秒运行一次,当前时间为:{}",new Date());
    }
}

配置文件(yml文件,也可以配置在apollo或者nacos服务器中)

service.fixed-delay: 1000
service.initial-delay: 10000


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM