postconstruct不执行_Spring Boot 应用在启动阶段执行代码的几种方式

前言

有时候我们需要在应用启动时执行一些代码片段,这些片段可能是仅仅是为了记录 log,也可能是在https://dayarch.top/p/pkix-certificate-import.html ,诸如上述业务要求我们可能会经常碰到

Spring Boot 提供了至少 5 种方式用于在应用启动时执行代码。我们应该如何选择?本文将会逐步解释与分析这几种不同方式

CommandLineRunner

CommandLineRunner 是一个接口,通过实现它,我们可以在 Spring 应用成功启动之后 执行一些代码片段

@Slf4j@Component@Order(2)public class MyCommandLineRunner implements CommandLineRunner {        @Override    public void run(String... args) throws Exception {        log.info("MyCommandLineRunner order is 2");        if (args.length > 0){            for (int i = 0; i < args.length; i++) {                log.info("MyCommandLineRunner current parameter is: {}", args[i]);            }        }    }}

当 Spring Boot 在应用上下文中找到 CommandLineRunner bean,它将会在应用成功启动之后调用 run() 方法,并传递用于启动应用程序的命令行参数

通过如下 maven 命令生成 jar 包:

mvn clean package

通过终端命令启动应用,并传递参数:

java -jar springboot-application-startup-0.0.1-SNAPSHOT.jar --foo=bar --name=rgyb

查看运行结果:

3aeacf86d07fd1bb90c655e5144e5e64.png

到这里我们可以看出几个问题:

  1. 命令行传入的参数并没有被解析,而只是显示出我们传入的字符串内容 --foo=bar,--name=rgyb,我们可以通过 ApplicationRunner 解析,我们稍后看
  2. 在重写的 run() 方法上有 throws Exception 标记,Spring Boot 会将 CommandLineRunner 作为应用启动的一部分,如果运行 run() 方法时抛出 Exception,应用将会终止启动
  3. 我们在类上添加了 @Order(2) 注解,当有多个 CommandLineRunner 时,将会按照 @Order 注解中的数字从小到大排序 (
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值