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 次执行,暂时处理逻辑时内部做幂等判断。