ApplicationRunner简单使用

发布时间 2023-06-24 15:28:08作者: 不凡34

ApplicationRunner 是 Spring Boot 提供的一个接口,用于在 Spring Boot 应用程序启动后执行一些特定的逻辑。它定义了一个 run() 方法,该方法在应用程序的上下文已经创建并准备好处理请求之后被调用。

要使用 ApplicationRunner,你可以按照以下步骤进行操作:

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. 在你的实现类上添加 @Component 注解,以将它声明为 Spring 组件,以便在应用程序启动时被自动扫描和加载。
  2. run() 方法中编写你希望在应用程序启动后执行的逻辑代码。可以执行任何你需要的操作,例如初始化数据、加载配置、启动定时任务等。
  3. 当应用程序启动时,run() 方法将自动被调用。

注意事项:

  • 可以通过在 ApplicationRunner 的实现类上添加 @Order 注解来定义多个 ApplicationRunner 的执行顺序。
  • run() 方法的参数 ApplicationArguments 包含了应用程序启动时传递的命令行参数,可以在方法中使用它进行特定的逻辑处理。

通过使用 ApplicationRunner,你可以方便地在应用程序启动后执行一些初始化或特定的处理逻辑,以满足应用程序的需求。

如下示例为在项目启动时重新激活已启用的定时任务,首先在数据库中查询已启用的定时任务,随后通过 QuartzManage 工具类通过查询到的任务信息 设置 Job 和 Trigger

import co.yixiang.modules.quartz.domain.QuartzJob;
import co.yixiang.modules.quartz.service.QuartzJobService;
import co.yixiang.modules.quartz.utils.QuartzManage;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class JobRunner implements ApplicationRunner {

    private final QuartzJobService quartzJobService;

    private final QuartzManage quartzManage;

    public JobRunner(QuartzJobService quartzJobService, QuartzManage quartzManage) {
        this.quartzJobService = quartzJobService;
        this.quartzManage = quartzManage;
    }

    /**
     * 项目启动时重新激活启用的定时任务
     * @param applicationArguments /
     */
    @Override
    public void run(ApplicationArguments applicationArguments){
        System.out.println("--------------------注入定时任务---------------------");
        /*--------------------------此处为个人逻辑------------------------------------*/
        // 从数据库中查询 已经启用的的 定时任务
        List<QuartzJob> quartzJobs = quartzJobService.findByIsPauseIsFalse();
        quartzJobs.forEach(quartzManage::addJob);
        System.out.println("--------------------定时任务注入完成---------------------");
    }
}