Spring ContextRefreshedEvent 事件触发多次问题

ContextRefreshedEvent 在哪被触发

在 AbstractApplicationContext 的 refresh() 方法中的 finishRefresh() 步骤中被触发。
也就是说当 context refresh 一次就会触发一次 ContextRefreshedEvent 事件
在这里插入图片描述

什么情况下 context 会 refresh() 多次

  • 手动执行多次 refresh 方法

  • 创建了多个 context,每个 context refresh 完成后都会触发

    • Feign 在创建一个 FeignClient 就会生成一个 context(主要环境隔离操作)

怎么样才能执行一次

  • 如果你使用的是 springboot,可以监听 ApplicationReadyEvent 事件,是由 SpringAppilication 触发(一般情况下不会存在多个 SpringApplication同时运行)
  • 将 Listener 只能给一个 固定的 ApplicationContext 加载到
  • 可以在 onApplicationEvent 事件接收处理方法中进行幂等性的判断
  • 可以通过 event 的属性判断,比如:类型,displayName
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值