You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Boot应用启动前实现打印Hello World的需求

问题原因说明

你当前使用的CommandLineRunner是Spring Boot专门设计为在ApplicationContext完全初始化、整个启动流程全部走完之后才触发的回调接口,所以打印内容自然会出现在所有启动日志的末尾,不符合你的需求。

可行实现方案

方案1:直接在main方法的SpringApplication.run执行前添加逻辑(最简单、优先级最高)

这是最直接的实现方式,代码会在Spring Boot启动流程正式开始前执行,示例代码如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SampleApplication {
    public static void main(String[] args) {
        // 此处代码会在Spring Boot启动前执行
        System.out.print("I would be appear in log first before spring application starts");
        SpringApplication.run(SampleApplication.class, args);
    }
}

方案2:使用ApplicationContextInitializer(容器刷新前执行,可操作上下文对象)

如果你的逻辑需要用到Spring上下文相关的能力,可以使用这个接口,它会在ApplicationContext执行refresh操作之前触发:

  1. 自定义初始化器实现类:
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;

public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        System.out.print("ApplicationContext刷新前执行的打印逻辑");
    }
}
  1. 注册初始化器,修改main方法即可:
public static void main(String[] args) {
    SpringApplication app = new SpringApplication(SampleApplication.class);
    app.addInitializers(new MyApplicationContextInitializer());
    app.run(args);
}

方案3:使用EnvironmentPostProcessor(环境配置准备完成后、上下文创建前执行)

如果你的逻辑需要提前读取Spring的环境配置(比如application.yml里的参数),可以使用这个接口,执行时机比ApplicationContextInitializer更早:

  1. 自定义实现类:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;

public class MyEnvPostProcessor implements EnvironmentPostProcessor {
    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        System.out.print("环境配置准备完成后执行的打印逻辑,此时可直接读取配置参数");
    }
}
  1. 注册配置:在resources目录下新建META-INF/spring.factories文件,添加如下内容:
org.springframework.boot.env.EnvironmentPostProcessor=你的类所在包路径.MyEnvPostProcessor
各方案执行顺序

从先到后依次为:

  • main方法中SpringApplication.run之前的代码
  • EnvironmentPostProcessor实现类的逻辑
  • ApplicationContextInitializer实现类的逻辑
  • CommandLineRunner/ApplicationRunner实现类的逻辑(即你原有写法的执行时机)

内容的提问来源于stack exchange,提问作者Bryan Caliwag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:06:00