1. 场景前提
假设有这样一个场景:在一个 Spring Cloud Feign(Greenwich.SR6)应用中,希望在 Spring 容器启动之后对一些事件做监听,如接收到 ContextRefreshedEvent
事件后,需要做一次初始化操作。一般都是实现 ApplicationListener
接口来监听事件,然后在 onApplicationEvent()
方法里做相应的处理
此时可能会遇到两种情况,一个是监听器中的 onApplicationEvent()
方法被调用了多次,还有一个即是在监听器中使用一些 bean 可能会抛出 NPE 异常
2. ApplicationListener 中初始化多次
2.1 环境搭建
代码已经上传至 https://github.com/masteryourself/diseases ,详见
diseases-spring-cloud/diseases-spring-cloud-feign-listener
工程
2.1.1 代码
1. BaiduFeignClient
@FeignClient(value = "baidu",url = "http://wwww.baidu.com")
public interface BaiduFeignClient {
@GetMapping("/")
String index();
}
2. CsdnFeignClient
@FeignClient(value = "csdn",url = "https://blog.csdn.net/")
public interface CsdnFeignClient