apache / servicecomb-java-chassis

ServiceComb Java Chassis is a Software Development Kit (SDK) for rapid development of microservices in Java, providing service registration, service discovery, dynamic routing, and service management features
Apache License 2.0
1.91k stars 811 forks source link

微服务配置文件microservice.yaml文件中配置项参数值中存在逗号时,解析成数组。 #2349

Closed develpoerX closed 1 year ago

develpoerX commented 3 years ago

问题描述: 微服务配置文件microservice.yaml文件中配置项参数值中存在逗号时,解析成数组。eg:在配置文件中写: hello: sayHelloPrefix: "Hello, ft" 使用DynamicPropertyFactory.getInstance().getStringproperty(“hello.sayHelloPrefix”, "")时,获取到的结果为Hello,ft,中间空格被删除。通过定位发现,配置文件参数值,在传递过程中,会经过com.netflix.config包中的ConcurrentMapConfiguration.java文件中的addPropertyImpl(String key, Object value)解析时,默认将value中的逗号解析成数组的形式。

kaister3 commented 3 years ago

可以用instanceof来判断是string还是list。

@SuppressWarnings("unchecked")
  public List<String> getFileSources() {
    Object property = finalConfig.getProperty(FILE_SOURCE);
    if (property instanceof String) {
      List<String> result = new ArrayList<>();
      result.add((String) property);
      return result;
    } else if (property instanceof List) {
      return (List<String>) property;
    }
    return new ArrayList<>();
  }
wujimin commented 3 years ago

getProperty时,placeholder无法发挥作用
可以尝试一下直接使用spirng的enviorment读取

liubao68 commented 1 year ago

close old issues, please feel free to submit a new one if the problem still exists.