详解SpringBoot启动项目后执行方法的几种方式

 更新时间:2023年09月12日 11:39:13   作者:无梦.  
在项目开发中某些场景必须要用到启动项目后立即执行方式的功能,本文主要聊聊实现立即执行的几种方法,具有一定的参考价值,感兴趣的可以了解一下

在项目开发中某些场景必须要用到启动项目后立即执行方式的功能,如我们需要去初始化数据到redis缓存、设置策略工厂,或者启动后读取相应的配置等,主要聊聊实现立即执行的几种方法。

一、CommandLineRunner

实现CommandLineRunner接口 然后在run方法里面调用需要调用的方法即可,好处是方法执行时,项目已经初始化完毕,是可以正常提供服务的。

同时该方法也可以接受参数,可以根据项目启动时: java -jar demo.jar arg1 arg2 arg3 传入的参数进行一些处理。

@Component
public class CommandLineRunnerImpl implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println(Arrays.toString(args));
}
}

二、 ApplicationRunner

这两者的实现方法一样,都是去继承相应的接口然后重写run方法即可,也都是SpringBoot框架所提供给我们的接口,也是项目中最常用的,比较灵活,有多个CommandLineRunner或ApplicationRunner实现类时可以通过@Order注解或实现Ordered接口重写getOrder方法实现按指定顺序执行。

@Order(1) //通过order注解指定执行顺序
@Component
public class CommandLineRunnerInit implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("CommandLineRunner 启动后执行方法...");
    }
}

ApplicationRunner 通过order注解指定执行顺序

@Order(2) //通过order注解指定执行顺序
@Component
public class ApplicationRunnerInit implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("ApplicationRunner 启动后执行方法...");
    }
}

ApplicationRunner 通过实现 Ordered 指定执行顺序

@Component
// 通过实现 Ordered 指定执行顺序
public class ApplicationRunnerInit implements ApplicationRunner, Ordered {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("ApplicationRunner 启动后执行方法...");
    }
    @Override
    public int getOrder() {
       return 0;
    }
}

这两者的不同其实就是run方法中所接收的参数类型不同,CommandLineRunner是对我们启动jar包时所传参数不进行处理,原样返回String类型给你,ApplicationRunner是封装成了ApplicationArguments参数,通过这个类型可以更方便的判断某些参数是否存在之类的。

三、JDK提供的@PostConstruct

@PostConstruct是JDK所提供的注解,使用该注解的方法会在服务器加载Servlet的时候运行。也可以在一个类中写多个方法并添加这个注解。

@Component
public class PostConstructTest {
    @PostConstruct
    public void inti1() {
        System.out.println("@PostConstruct 方法1执行...");
    }
    @PostConstruct
    public void inti2() {
        System.out.println("@PostConstruct 方法2执行...");
    }
}

三、其他方法

3.1 ApplicationContextAware

ApplicationContextAware 一般被用来获取applicationContext上下文信息,并且也可以启动时被执行

@Component
public class ApplicationContextAwareTest implements ApplicationContextAware {
    private ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
        System.out.println("ApplicationContextAware 方法执行...");
    }
}

3.2 ApplicationListener

ApplicationListener 事件监听,启动会执行多个监听器【会多次执行】,具体可了解Springboot服务启动过程。

@Component
public class ApplicationListenerTest implements ApplicationListener {
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        System.out.println("ApplicationListener 方法执行...");
    }
}

3.3 InitializingBean

InitializingBean 初始化启动后方法执行

@Component
public class InitializingBeanInit implements InitializingBean {
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitializingBean 方法执行...");
    }
}

四、总结

以上多种初始执行方法日志输出为:

ApplicationContextAware 方法执行...
InitializingBean 方法执行...
    
@PostConstruct 方法1执行...
@PostConstruct 方法2执行...

ApplicationListener 方法执行...
ApplicationListener 方法执行...
ApplicationListener 方法执行...
ApplicationListener 方法执行...
    
ApplicationRunner 启动后执行方法...
CommandLineRunner 启动后执行方法...
    
ApplicationListener 方法执行...
ApplicationListener 方法执行...

存在多个ApplicationRunner、CommandLineRunner可以通过order指定其执行顺序,但其执行顺序没有ApplicationContextAware等高。但一般生产中使用ApplicationRunner、CommandLineRunner,因为其更加灵活。

到此这篇关于详解SpringBoot启动项目后执行方法的几种方式的文章就介绍到这了,更多相关SpringBoot启动后执行方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot业务逻辑异常的处理方法介绍

    SpringBoot业务逻辑异常的处理方法介绍

    本篇文章为大家展示了如何在SpringBoot中统一处理逻辑异常,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获
    2022-09-09
  • 基于SpringBoot+AOP实现操作日志记录

    基于SpringBoot+AOP实现操作日志记录

    本文介绍了使用日志记录的实现方法,步骤包括明确记录信息、搭建基础环境、创建操作日志实体类和自定义注解、创建AOP切面,重点在于精准控制需要记录日志的接口,通过自定义注解和使用、切点表达式、环绕通知实现实现日志记录逻辑,需要的朋友可以参考下
    2026-04-04
  • SpringBoot+JavaMailSender实现腾讯企业邮箱配置

    SpringBoot+JavaMailSender实现腾讯企业邮箱配置

    这篇文章主要介绍了SpringBoot+JavaMailSender实现腾讯企业邮箱配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java 实现Excel文档添加超链接的代码

    Java 实现Excel文档添加超链接的代码

    超链接即内容链接,通过给特定对象设置超链接,可实现载体与特定网页、文件、邮件、网络等的链接,点击链接载体可打开链接目标,在文档处理中是一种比较常用的功能,本文将介绍通过Java程序给Excel文档添加超链接的方法,感兴趣的朋友一起看看吧
    2020-02-02
  • 解决JavaWeb读取本地json文件以及乱码的问题

    解决JavaWeb读取本地json文件以及乱码的问题

    今天小编就为大家分享一篇解决JavaWeb读取本地json文件以及乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • nacos配置在代码中引用的方法讲解

    nacos配置在代码中引用的方法讲解

    这篇文章主要介绍了nacos配置在代码中如何引用,如果主配置中配置的内容和拓展配置的内容重复则按主配置的配置 ,如果拓展配置中的内容和另一个拓展配置中的内容重复,则按下标大的配置作为最终的配置,对nacos配置代码引用相关知识感兴趣朋友一起看看吧
    2022-12-12
  • IntelliJ IDEA下自动生成Hibernate映射文件以及实体类

    IntelliJ IDEA下自动生成Hibernate映射文件以及实体类

    这篇文章主要介绍了IntelliJ IDEA下自动生成Hibernate映射文件以及实体类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Spring中的八大模式简单介绍

    Spring中的八大模式简单介绍

    这篇文章主要介绍了Spring中的八大模式简单介绍,结合实例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • 详解Spring中Lookup注解的使用

    详解Spring中Lookup注解的使用

    我们知道在spring容器中单独的一个抽象类是不能成为一个bean的,那么有没有办法呢?这个时候我们可以使用Lookup注解,下面跟随小编看下Spring中Lookup注解的使用
    2021-10-10
  • IntelliJ IDEA安装与基础配置指南

    IntelliJ IDEA安装与基础配置指南

    IntelliJ IDEA是一款由JetBrains公司开发的Java集成开发环境,支持Java、Kotlin、Groovy、Scala等多种编程语言,IntelliJ IDEA作为一款强大的开发工具,被广泛应用于Java开发、Web开发、Android开发等领域,本文给大家介绍了IntelliJ IDEA安装与基础配置
    2025-07-07

最新评论