nacos-group / nacos-spring-project

Nacos ECO Project for Spring Framework
https://nacos.io/
Apache License 2.0
756 stars 311 forks source link

bug configService 多次创建!内存泄漏,多开线程 #207

Open lybbyl opened 4 years ago

lybbyl commented 4 years ago

Issue Description Type: bug report or feature request bug report

Describe what happened (or what feature you want) ConfigFactory.createConfigService(Properties properties) 有可能会调用多次。 并产生多个实例 里面由于有线程池长轮训服务造成内存泄漏,多开线程 等多种异常情况

错误的原因是因为NacosUtils.identify(Map properties) 方法造出了不同的key 在NacosConfigEnvironmentProcessor中的匿名builder 调用NacosUtils.identify方法时,由于propertie使用了 Properties buildGlobalNacosProperties() 方法,如下图 ,没有带上encode属性 ,导致产生的key为 -----> ||127.0.0.1:18848,127.0.0.1:28848,127.0.0.1:38848|||||| image

image image

当spring IOC时 调用NacosConfigurationPropertiesBindingPostProcessor 给bean做处理时,实际上Propertie中会有encode属性 产生的key如下 -----> ||127.0.0.1:18848,127.0.0.1:28848,127.0.0.1:38848|||||UTF-8| 判断没有configService 就会重新创建!

Describe what you expected to happen ConfigFactory.createConfigService(Properties properties) 在properties相同时 应该只被创建一次

How to reproduce it (as minimally and precisely as possible) 客户端如下配置 image image

image image

image image

Tell us your environment

com.alibaba.boot nacos-config-spring-boot-starter 0.2.4

Anything else we need to know? 建议修改nacos-config-spring-boot-autoconfigure 项目中NacosUtils.identify 方法 1:要么属性全部考虑清楚加上 或者2:要么key更直白 只和相关的属性沾边移除encode