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 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 business;

}

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

你可能感兴趣的:(spring,boot,后端,java)