ApplicationPreparedEvent2次加载的问题

现象

代码定义个 Listner 为了,为了预加载一些外部配置。

明显可以看到在 27 分和 30 分分别执行了 1 次。

代码分析

第 1 次由 spring-boot 加载,prepareContext 时调用。

org/springframework/boot/spring-boot/2.3.3.RELEASE/spring-boot-2.3.3.RELEASE-sources.jar!/org/springframework/boot/SpringApplication.java:393

第 2 次调用,依然有 spring-boot 发起,在 refreshContext 阶段发起

调用到了 RestartListener,RestartListener 会再次发布 PrepareEvent

而 RestartListener 是 spring-cloud 包自动通过 spring.factories 文件引入的

解决这个问题

这个应该属于 bug 类问题,当我用到了 ApplicationPrepareEvent 时,意味着我必须前置执行。为啥要做 2 次执行,暂时处理逻辑时内部做幂等判断。