SpringBoot的事件及其使用
一、Spring Boot 中常见的事件
ApplicationStartEvent
ApplicationStartedEvent:当 Spring Boot 应用程序启动时,发布该事件。这个事件表示应用程序已经准备好接受请求,但在处理请求之前可能还需要一些初始化操作。
ApplicationReadyEvent
ApplicationReadyEvent:当 Spring Boot 应用程序准备就绪时,发布该事件。这个事件表示应用程序已经启动并且已经准备好接受请求,可以处理用户请求了。
ApplicationFailedEvent
ApplicationFailedEvent:当 Spring Boot 应用程序启动失败时,发布该事件。这个事件表示应用程序启动过程中出现了严重错误,导致应用程序无法正常启动。
ApplicationEnvironmentPreparedEvent
ApplicationEnvironmentPreparedEvent:当 Spring Boot 应用程序的环境准备完成时,发布该事件。这个事件表示应用程序的配置环境已经准备好,但尚未加载应用程序的 bean。
ApplicationPreparedEvent
ApplicationPreparedEvent:当 Spring Boot 应用程序准备完成时,发布该事件。这个事件表示应用程序的配置和 bean 已经加载完成,但尚未启动。
ApplicationStoppedEvent
ApplicationStoppedEvent:当 Spring Boot 应用程序停止时,发布该事件。这个事件表示应用程序已经关闭,并且不再接受新的请求。
用户自定义事件
除了上述的核心事件外,Spring Boot 还允许用户自定义事件,并在适当的时候发布这些事件。通过实现 ApplicationEvent
接口或其子类,可以创建自定义的事件,并在适当的时候使用 ApplicationEventPublisher
发布这些事件。
二、用户自定义事件实际应用
创建自定义事件
public class MyEvent extends ApplicationEvent {
public MyEvent(Object source) {
super(source);
}
//其他构造函数及其方法
}
初始化自定义事件,这里我选择的是在SpringBoot准备就绪之后初始化我创建的自定义事件
@RequiredArgsConstructor
public class ApplicationContentPostProcessor implements ApplicationListener<ApplicationReadyEvent>{
private final ApplicationContext applicationContext;
/**
* 执行标识,确保Spring事件 {@link ApplicationReadyEvent} 有且执行一次
*/
private final AtomicBoolean executeOnlyOnce = new AtomicBoolean(false);
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
if (!executeOnlyOnce.compareAndSet(false, true)) {
return;
}
applicationContext.publishEvent(new MyEvent(this));
}
}
创建监听器监听自定义事件
public class MyListener implements ApplicationListener<MyEvent> {
@Override
public void onApplicationEvent(MyEvent event) {
//监听到之后的操作
}
}