Spring Boot 提供了多种事件用于在应用启动过程中进行不同阶段的监听。以下是一些常见的 Spring Boot 事件:
- ApplicationStartingEvent:在运行开始时发送,但在任何处理之前。
- ApplicationEnvironmentPreparedEvent:当环境已知且可以对其进行调整时发送。
- ApplicationContextInitializedEvent:在
ApplicationContext
准备并进行任何后处理之前发送。 - ApplicationPreparedEvent:当刷新
ApplicationContext
之前发送。 - ApplicationStartedEvent:当应用已启动并且
ApplicationRunner
和CommandLineRunner
还未调用。 - ApplicationReadyEvent:当应用启动完毕,并且
ApplicationRunner
和CommandLineRunner
已调用。 - ApplicationFailedEvent:当应用启动失败时发送。
下面是各个事件的代码示例:
1. ApplicationStartingEvent
import org.springframework.boot.context.event.ApplicationStartingEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class StartingEventListener implements ApplicationListener<ApplicationStartingEvent> {
@Override
public void onApplicationEvent(ApplicationStartingEvent event) {
System.out.println("应用开始启动");
}
}
2. ApplicationEnvironmentPreparedEvent
import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class EnvironmentPreparedEventListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent> {
@Override
public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
System.out.println("环境准备完成");
}
}
3. ApplicationContextInitializedEvent
import org.springframework.boot.context.event.ApplicationContextInitializedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class ContextInitializedEventListener implements ApplicationListener<ApplicationContextInitializedEvent> {
@Override
public void onApplicationEvent(ApplicationContextInitializedEvent event) {
System.out.println("应用上下文初始化完成");
}
}
4. ApplicationPreparedEvent
import org.springframework.boot.context.event.ApplicationPreparedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class PreparedEventListener implements ApplicationListener<ApplicationPreparedEvent> {
@Override
public void onApplicationEvent(ApplicationPreparedEvent event) {
System.out.println("应用准备完成");
}
}
5. ApplicationStartedEvent
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class StartedEventListener implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
System.out.println("应用启动完成,通知监听器执行缓存预加载操作");
}
}
6. ApplicationReadyEvent
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class ReadyEventListener implements ApplicationListener<ApplicationReadyEvent> {
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
System.out.println("应用准备就绪,可以接受请求");
}
}
7. ApplicationFailedEvent
import org.springframework.boot.context.event.ApplicationFailedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class FailedEventListener implements ApplicationListener<ApplicationFailedEvent> {
@Override
public void onApplicationEvent(ApplicationFailedEvent event) {
System.err.println("应用启动失败");
}
}
解释
-
引入必要的包:
ApplicationListener
:Spring 框架的一个接口,用于监听各种事件。Component
:Spring 框架的注解,用于将类注册为 Spring 容器的一个 bean。- 各个事件类如
ApplicationStartingEvent
等。
-
实现监听器类:
- 每个监听器类都实现了
ApplicationListener<SpecificEvent>
接口,并重写onApplicationEvent
方法。 - 在
onApplicationEvent
方法中,你可以编写任何你希望在特定事件触发时执行的逻辑。
- 每个监听器类都实现了
-
注册监听器:
- 通过
@Component
注解将各个监听器注册为 Spring 容器的一个 bean。这使得 Spring 容器在启动过程中能够自动检测并注册这些监听器。
- 通过
通过这种方式,你可以在 Spring Boot 应用启动的不同阶段执行特定的初始化或清理操作。