使用@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
方法会在一个独立的线程中执行,而不是在主线程中执行。这样可以防止长时间的操作阻塞主线程