Spring Boot ApplicationReadyEvent
ApplicationReadyEvent.class 是 Spring Boot 应用程序中的一个类文件,属于 Spring 的事件监听机制的一部分。下面我会详细解释它的作用、使用场景以及如何使用它。
一、ApplicationReadyEvent 是什么?
ApplicationReadyEvent 是 Spring Boot 提供的一个应用事件(Application Event),它在 Spring Boot 应用完全启动并准备好接收请求时触发。
这个事件是在 SpringApplication 启动流程的最后阶段发布的,表示:
- 所有的
ApplicationContext已经加载完成; - 所有的
CommandLineRunner和ApplicationRunner已经执行完毕; - 应用已经准备好处理请求。
官方文档说明(简化):
Event published as late as conceivably possible to indicate that the application is ready to service requests.
二、ApplicationReadyEvent 的继承关系
public class ApplicationReadyEvent extends SpringApplicationEvent
继承链如下:
ApplicationReadyEvent
└── SpringApplicationEvent
└── ApplicationEvent
└── EventObject
三、何时使用 ApplicationReadyEvent?
通常用于在 Spring Boot 应用启动完成后执行一些初始化逻辑,例如:
- 初始化数据库数据;
- 启动定时任务;
- 发送系统启动通知;
- 加载缓存;
- 启动后台线程等。
四、如何使用 ApplicationReadyEvent?
方法一:通过监听器监听事件
你可以通过监听 ApplicationReadyEvent 来执行启动后的逻辑。
示例代码:
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@Component
public class AppStartupRunner {
@EventListener(ApplicationReadyEvent.class)
public void onApplicationReady() {
System.out.println("Application is ready! You can start processing requests.");
// 在这里执行初始化逻辑
}
}
方法二:使用 CommandLineRunner 或 ApplicationRunner
虽然不是事件机制,但这两个接口通常在 ApplicationReadyEvent 之前执行,也可以用于启动后逻辑。
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class MyCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("CommandLineRunner: Application started with arguments: " + String.join(", ", args));
}
}
五、与 ApplicationStartingEvent 和 ApplicationFailedEvent 的区别
| 事件名称 | 触发时机 |
|---|---|
ApplicationStartingEvent |
应用刚启动,还没创建上下文 |
ApplicationReadyEvent |
应用完全启动,准备好接收请求 |
ApplicationFailedEvent |
应用启动失败时触发 |
六、常见问题
1. ApplicationReadyEvent 和 @PostConstruct 的区别?
@PostConstruct是在 Bean 初始化阶段调用的;ApplicationReadyEvent是在整个应用启动完成后触发的;- 如果你需要整个上下文准备好后再执行,建议使用事件。
2. 能否在 ApplicationReadyEvent 中注入其他 Bean?
可以,因为此时 Spring 上下文已经完全加载,你可以安全地注入任何 Bean。
七、总结
| 项目 | 说明 |
|---|---|
| 类名 | org.springframework.boot.context.event.ApplicationReadyEvent |
| 作用 | 应用完全启动后触发 |
| 使用方式 | 通过 @EventListener(ApplicationReadyEvent.class) 监听 |
| 适合场景 | 启动后初始化、通知、加载等操作 |
如果你有具体的使用场景或问题,可以告诉我,我可以提供更详细的代码示例或解决方案。
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/19000029

浙公网安备 33010602011771号