当前位置: 代码网 > it编程>编程语言>Java > SpringBoot中@Scheduled实现服务启动时执行一次

SpringBoot中@Scheduled实现服务启动时执行一次

2024年08月08日 Java 我要评论
说到定时任务,我们应该会想起@scheduled,quartz以及xxl-job,但是有的单体服务或者小项目,为了方便快捷,可能会直接使用@scheduled去实现异步任务。因此,从而延伸出本文的主题

说到定时任务,我们应该会想起@scheduled,quartz以及xxl-job,但是有的单体服务或者小项目,为了方便快捷,可能会直接使用@scheduled去实现异步任务。因此,从而延伸出本文的主题需求。

当项目中使用@scheduled,如何在项目启动的时候让指定的异步任务提前执行一次?

一、@scheduled详解

@scheduled注解支持多个参数,用于灵活控制任务执行时间

cron:cron表达式,可以精准控制秒、分、小时、日、月、周等

在这里插入图片描述

  • zone:接收一个时区,比如我们一般使用的时区asia/shanghai,该字段我们一般留空。
  • fixeddelay:上一次执行完毕时间点之后多长时间再执行。如@scheduled(fixeddelay = 5000)
  • fixeddelaystring:与 fixeddelay 意思相同,只是使用字符串的形式。唯一不同的是支持占位符,如@scheduled(fixeddelaystring = “5000”)
  • fixedrate:上一次开始执行时间点之后多长时间再执行,如@scheduled(fixedrate = 5000)
  • fixedratestring:与 fixedrate 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。
  • initialdelay:第一次延迟多长时间后再执行,如第一次延迟1秒后执行,之后按fixedrate的规则每5秒执行一次@scheduled(initialdelay=1000, fixedrate=5000)
  • initialdelaystring:与 initialdelaystring 意思相同,只是使用字符串的形式。唯一不同的是支持占位符。

二、逻辑实现

1、创建定时任务逻辑方法

/**
 * @author 码至终章
 * @version 1.0
 */
@component
public class scheduledtest {

    @scheduled(cron = "* 1 * * * ?")
    public void task1() throws exception{
        system.out.println("task1 执行: " + thread.currentthread() + "-" + datetime.now());
    }
}

2、新建一个启动执行类

该类主要在启动时手动调用指定的任务方法

/**
 * @author 码至终章
 * @version 1.0
 */
@component
public class startuptasks {

    private final scheduledtest scheduledtasks;

    public startuptasks(scheduledtest scheduledtasks) {
        this.scheduledtasks = scheduledtasks;
    }

    @postconstruct
    public void startup() {
        try {
            system.out.println("服务启动执行任务");
            scheduledtasks.task1();
        }catch (exception e){
			e.printstacktrace();
        }
    }
}

注:启动类记得自己加上@enablescheduling,定时任务 才会执行,当然这个不影响本文的逻辑测试

三、测试结果

服务启动后,查看打印信息

在这里插入图片描述

到此这篇关于springboot中@scheduled实现服务启动时执行一次的文章就介绍到这了,更多相关springboot 服务启动时执行内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com