Springboot+Nacos 配置中心 动态刷新自定义配置文件失效

项目场景:

Springboot+Nacos 配置中心 动态刷新自定义配置文件


问题描述

通过nacos注入的配置信息,未刷新spring控制BusinessDictConfig

@Slf4j
@RestController
@RequestMapping("/mqtt")
@RefreshScope
public class ConfigController {
    @Autowired
    private BusinessDictConfig config;

    @GetMapping("/config")
    public Result testNacosConfig() throws NacosException {
        log.info(config.getBusiness().toString());
        return Result.OK(config.getBusiness());
    }

}
@Configuration
@ConfigurationProperties(prefix = "dict")
public class BusinessDictConfig {
    /**
     * 通过nacos business.yml 配置注入
     */
    @Getter
    @Setter
    private Map<Integer,String> business;
}

server:
  port: 7011
spring:
  config:
    import:
      - optional:nacos:business.yml


原因分析:

通过日志和源码发现,nacos配置中心修改,触发了nacos监听机制

例如:Handler 发送消息有两种方式,分别是 Handler.obtainMessage()Handler.sendMessage(),其中 obtainMessage 方式当数据量过大时,由于 MessageQuene 大小也有限,所以当 message 处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。


解决方案:

@RefreshScope 配置的class不对

@Configuration
@ConfigurationProperties(prefix = "dict")
@RefreshScope
public class BusinessDictConfig {
    /**
     * 通过nacos business.yml 配置注入
     */
    @Getter
    @Setter
    private Map<Integer,String> business;

}

需要在刷新的bean上配置@RefreshScope

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值