跳到主要内容

使用@EventListener导致服务启动失败

使用@EventListener({ApplicationReadyEvent.class})可以做到当服务启动后,开始执行一些特殊业务数据操作,

但是需要注意的是,调用这个方法的是主线程,如果在这个方法中发生异常则会导致整个服务都启动失败。

修复办法

修复办法自然是将事件处理放到异步线程中

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Component;

@Component
@EnableAsync
public class MyApplicationListener {

@Async
@EventListener({ApplicationReadyEvent.class})
public void onApplicationReady() {
// 这段代码将在一个独立的线程中执行,而不是主线程中
System.out.println("Application is ready! Executing in a separate thread.");
}
}

onApplicationReady 方法会在一个独立的线程中执行,而不是在主线程中执行。这样可以防止长时间的操作阻塞主线程