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

这篇具有很好参考价值的文章主要介绍了SpringBoot 启动项目后执行方法的几种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringBoot项目启动后初始化执行方法

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

一、CommandLineRunner

二、 ApplicationRunner

这两者的实现方法一样,都是去继承相应的接口然后重写run方法即可,也都是SpringBoot框架所提供给我们的接口,也是项目中最常用的,比较灵活,有多个CommandLineRunnerApplicationRunner实现类时可以通过@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,因为其更加灵活。文章来源地址https://www.toymoban.com/news/detail-672034.html

到了这里,关于SpringBoot 启动项目后执行方法的几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SpringBoot】 启动后执行方法的五种方式

    在 SpringBoot 工程 启动后, 执行方法的五种方式: 1、实现 CommandLineRunner 接口 项目初始化完毕后,才会调用方法,提供服务 2、实现 ApplicationRunner 接口 同 CommandLineRunner。只是传参格式不一样。CommandLineRunner:没有任何限制;ApplicationRunner:key-value 3、实现 ApplicationListener 接口

    2023年04月08日
    浏览(34)
  • python - 线程的启动的几种方式

    本文主要给大家介绍python启动线程的四种方式 创建 Thread 对象,然后调用 start() 方法启动线程。 重写 run() 方法,并调用 start() 方法启动线程。 使用ThreadPoolExecutor 类的 submit() 方法提交任务,自动创建线程池并执行任务。 创建进程,然后在进程中启动线程。 以上就是python中启

    2024年02月12日
    浏览(28)
  • MySQL运维02-MySQL执行SQL文件的几种方式

    对于这种方式,还可以查看文件执行时的输出,有如下两种方法: 在MySQL服务器上执行SQL文件,一种方法是可以通过mysql -e或者直接登录mysql客户端后,通过source命令执行文件。另一种方法是将SQL文件作为mysql客户端的输入,即 mysql batch-file

    2024年02月11日
    浏览(49)
  • Linux下启动jar包的几种常见方式

    首先把这两个jar上传到linux ,会操作启动一个应用和同时启动多个应用 两个项目jar已上传,可去这里下载: https://download.csdn.net/download/zengzhaowu313/88411336 第一种、直接启动 jar 包  ,先启动一个应用程序 ,后面操作启动多个应用 java -jar Test001.jar # 缺点:当前 ssh 窗口会被锁定,

    2024年02月05日
    浏览(42)
  • SpringBoot项目启动后执行指定方法的四种实现

    今日的好天气 距离上一次更新帖子已经过了很久很久,久到我也不知道我在搞什么飞机。 国庆节第一天终于搬到了新家,最近量子纠缠比较火,冬天也在路上,匆匆又一年。 @PostConstruct是Java自带的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在

    2023年04月15日
    浏览(33)
  • Unity——延时执行的几种方法

    延时执行的函数,可以自己设定延时要执行的函数和具体延时的时间,是Monobehaviour基类中实现好的方法 在Update等刷新函数内计时,timer += Time.deltaTime 当时间达到预期,执行需要延时的方法。需要注意的是,增量时间Time.deltaTime是每帧都不同的浮点数。计时器不能用 == 去判断

    2024年02月11日
    浏览(26)
  • SpringBoot读取配置的几种方式

    1.第一种@Value 注意:static和final修饰的变量不生效 2.通过@ConfigurationProperties(prefix=“”)   适用于对对象多个变量统一绑定,比@Value高效 3.通过Environment Spring底层提供的API动态获取变量值    4.通过@PropertySources获取外部文件路径,再通过@Value获取值  只能读取properties文件

    2024年02月15日
    浏览(28)
  • springboot接收参数的几种方式

    传参格式:?号传参,在地址栏上加参数 传参格式:请求体传参 form-data的请求是在body中,为key=value格式,同时可以传文件,Content-Type为multipart/form-data,后端可以用@RequestParam接收。 json传参也是在body当中,只不过json是一种数据格式,后端可以用@RequestBody接收。 地址栏传参,

    2024年02月10日
    浏览(29)
  • Android常用的延迟执行任务及轮询定时任务的几种方式

    Executor 的 execute 方法:向线程池中提交任务(异步执行) Executor 接口是 Java 并发编程中的一个接口,它定义了一种执行任务的通用机制。Executor 接口有一个重要的方法 execute,它的作用是提交一个任务(Runnable 或 Callable)给 Executor 进行执行。 execute 方法的作用如下: 提交任务:

    2024年04月25日
    浏览(31)
  • 玩转SpringBoot:SpringBoot的几种定时任务实现方式

    在现代软件开发中,定时任务是一种常见的需求,用于执行周期性的任务或在特定的时间点执行任务。这些任务可能涉及数据同步、数据备份、报表生成、缓存刷新等方面,对系统的稳定性和可靠性有着重要的影响。 Spring Boot 提供了强大且简单的定时任务功能,使开发人员能

    2024年03月09日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包