Spring Boot 应用启动成功后的事件监听与日志输出实践

一、 概述

在Spring Boot应用开发过程中,我们经常需要在应用启动完成后执行一些特定的操作或输出启动信息。本文将介绍两种常用的实现方式:ApplicationListenerApplicationRunner

二、 使用 ApplicationListener 监听应用就绪事件

2.1 实现方式

java 复制代码
@Component
public class AppReadyListener implements ApplicationListener<ApplicationReadyEvent> {
    @Override
    public void onApplicationEvent(@NotNull ApplicationReadyEvent event) {
        LoggerFactory.getLogger(AppReadyListener.class).info("✅✅✅✅✅✅✅✅✅✅✅✅");
    }
}

2.2 特点分析

  • 监听事件ApplicationReadyEvent
  • 实现接口ApplicationListener<ApplicationReadyEvent>
  • 触发时机:应用完全启动并准备好接收请求时
  • 使用注解@Component 注册为Spring组件
  • 应用场景:适合在应用启动后执行初始化操作或输出状态信息

三、使用 ApplicationRunner 实现启动后逻辑

3.1 实现方式

java 复制代码
@Slf4j
@AllArgsConstructor
public class Knife4jDocUrlPrintHandler implements ApplicationRunner {

    private final ConfigurableEnvironment environment;

    @Override
    public void run(ApplicationArguments args) {
        log.info("API Document: 【address】:{}{}/doc.html", 
            environment.getProperty("server.port", "8080"), 
            environment.getProperty("server.servlet.context-path", ""));
    }
}

3.2 特点分析

  • 实现接口ApplicationRunner
  • 触发时机:应用启动完成后立即执行
  • 参数获取 :可以通过 ApplicationArguments 获取启动参数
  • 依赖注入 :可以方便地注入其他Bean(如这里的 ConfigurableEnvironment
  • 应用场景:适合输出应用配置信息、API文档地址等

四、 两种方式的对比

特性 ApplicationListener ApplicationRunner
监听机制 监听特定事件 在应用启动后运行
参数访问 通过事件对象获取 可直接获取ApplicationArguments
执行顺序 在ApplicationRunner之后 优先执行
适用场景 通用事件处理 启动后具体业务逻辑

五、 实际应用示例

5.1 输出API文档地址

java 复制代码
log.info("API Document: 【address】:{}{}/doc.html", 
    environment.getProperty("server.port", "8080"), 
    environment.getProperty("server.servlet.context-path", ""));

5.2 显示应用启动完成标识

java 复制代码
LoggerFactory.getLogger(AppReadyListener.class).info("✅✅✅✅✅✅✅✅✅✅✅✅");

六、 最佳实践建议

  1. 合理选择实现方式 :根据具体需求选择 ApplicationListenerApplicationRunner
  2. 避免耗时操作:启动后逻辑应尽量简洁,避免影响应用启动时间
  3. 错误处理:对启动后执行的逻辑添加适当的异常处理
  4. 日志记录:使用合适的日志级别记录启动信息

七、总结

通过 ApplicationListenerApplicationRunner,我们可以灵活地在Spring Boot应用启动完成后执行各种操作。前者更适合事件驱动的场景,后者更适合执行具体的启动后业务逻辑。根据实际需求选择合适的方式,能够有效提升应用的可维护性和用户体验。

相关推荐
无巧不成书021813 小时前
30分钟入门Java:从历史到Hello World的小白指南
java·开发语言
苍何13 小时前
30分钟用 Agent 搓出一家跨境网店,疯了
后端
ssshooter13 小时前
Tauri 2 iOS 开发避坑指南:文件保存、Dialog 和 Documents 目录的那些坑
前端·后端·ios
追逐时光者14 小时前
一个基于 .NET Core + Vue3 构建的开源全栈平台 Admin 系统
后端·.net
程序员飞哥14 小时前
90后大龄程序员失业4个月终于上岸了
后端·面试·程序员
zs宝来了14 小时前
Playwright 自动发布 CSDN 的完整实践
java
彭于晏Yan15 小时前
Redisson分布式锁
spring boot·redis·分布式
吴声子夜歌15 小时前
TypeScript——基础类型(三)
java·linux·typescript
GetcharZp15 小时前
Git 命令行太痛苦?这款 75k Star 的神级工具,让你告别“合并冲突”恐惧症!
后端