• SpringBoot项目中只执行一次的任务写法


    SpringBoot项目中只执行一次的任务写法

    有时候我们需要进行初始化工作,就说明只要进行一次的工作,那么,在Springboot项目中如何做到任务只进行一次呢

    利用定时任务

    在Spring Boot项目中,你可以使用Spring框架提供的@Scheduled注解和定时任务配置来实现只执行一次的任务。以下是一个实现只执行一次任务的步骤:

    1. 创建一个Spring Boot项目,确保项目中包含Spring框架的依赖。

    2. 创建一个任务类,该类包含你要执行的任务方法。在这个方法上使用@Scheduled注解来配置任务的触发条件。

    3. 配置定时任务,确保任务只执行一次。

    下面是一个示例:

    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyScheduledTask {
    
        // 使用@Scheduled注解来配置任务的触发条件
        @Scheduled(fixedDelay = Long.MAX_VALUE) // 用一个非常大的延迟值,确保只执行一次
        public void myTask() {
            // 这里编写你的任务逻辑
            System.out.println("执行只执行一次的任务");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在上面的示例中,我们创建了一个名为MyScheduledTask的任务类,并在myTask方法上使用@Scheduled注解来配置任务的触发条件。fixedDelay属性设置为Long.MAX_VALUE,这样任务将只执行一次。

    另外,确保在Spring Boot的主应用程序类上添加@EnableScheduling注解,以启用定时任务的支持,例如:

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.scheduling.annotation.EnableScheduling;
    
    @SpringBootApplication
    @EnableScheduling
    public class MyApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    这样,Spring Boot将会扫描并执行被@Scheduled注解标记的方法。一旦应用程序启动,myTask方法将会被执行一次。

    需要注意的是,虽然上述示例使用了fixedDelay属性来实现只执行一次的任务,但你还可以使用其他属性和表达式来配置任务的触发条件,具体取决于你的需求。例如,你可以使用fixedRate属性来定期触发任务,或者使用Cron表达式来实现更复杂的调度。

    除了使用@Scheduled注解来配置定时任务以实现只执行一次的任务之外,还可以考虑以下两种方法:

    使用@PostConstruct注解:

    你可以在Spring Bean的初始化方法上使用@PostConstruct注解,来执行一次性的初始化任务。这个方法会在Bean初始化后立即执行。

    import javax.annotation.PostConstruct;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyInitTask {
    
        @PostConstruct
        public void init() {
            // 执行只执行一次的初始化任务
            System.out.println("执行只执行一次的初始化任务");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    这种方法适用于一次性的初始化任务,但不具备定时执行的能力。

    使用ApplicationRunner接口:

    你可以创建一个实现ApplicationRunner接口的类,在run方法中执行只执行一次的任务。这个方法会在Spring Boot应用程序启动后执行一次。

    import org.springframework.boot.ApplicationArguments;
    import org.springframework.boot.ApplicationRunner;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyApplicationRunner implements ApplicationRunner {
    
        @Override
        public void run(ApplicationArguments args) throws Exception {
            // 执行只执行一次的任务
            System.out.println("执行只执行一次的任务");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    这种方法适用于一次性的应用程序启动任务。

    这些方法提供了在Spring Boot应用程序启动后执行一次性任务的方式。选择适当的方法取决于你的需求和任务性质。如果需要更复杂的任务调度或周期性执行,@Scheduled注解仍然是更适合的选择。

  • 相关阅读:
    ubuntu18安装caffe(CPU)
    关于ZooKeeper的一些面试题
    三.使用java的API文档
    24---WPF缓存
    Part3_理解MATSIM_第48章 MATSim作为蒙特卡洛引擎
    【信息系统项目管理师】 学习笔记 第1章 信息化发展
    Python(3)对象
    冠达管理:“旺季”来临,煤炭板块走高,云煤能源、陕西黑猫涨停
    【youcans 的 OpenCV 例程 300篇】244. 特征检测之 BRIEF 特征描述
    uboot-重定位中断向量表 relocate_vectors 函数
  • 原文地址:https://blog.csdn.net/Go_ahead_forever/article/details/133207107