
# Java Chassis使用配置中心
- Java Chassis使用以config-center命名的配置中心。 需要在项目中增加如下依赖：
  ```
  <dependency>
    <groupId>org.apache.servicecomb</groupId>
    <artifactId>config-cc</artifactId>
  </dependency>
  ```
  如果项目已经直接或者间接包含如上依赖，则无需添加。Java Chassis包含如[表1]所示配置项，这些配置项的值指定了微服务在配置中心的身份，以及微服务和配置中心之间的交互。
   表1Java Chassis常用配置项 
  | 配置项                                  | 含义                                       | 缺省值                    | 备注                                |
  |:---|:---|:---|:---|
  | servicecomb.service.application      | 所属应用                                     | default                | -                                 |
  | servicecomb.service.name             | 微服务名称                                    | defaultMicroservice    | -                                 |
  | servicecomb.service.version          | 微服务版本                                    | 1.0.0.0                | -                                 |
  | servicecomb.service.environment      | 环境                                       | -                      | 取值为环境ID。如production，development等。 |
  | servicecomb.config.client.serverUri  | 访问地址，格式为http(s)://{ip}:{port}，以","分隔多个地址 | http://127.0.0.1:30103 | config-center                     |
  | servicecomb.config.client.tenantName | 应用的租户名称                                  | default                | config-center                     |
     
  
- Java Chassis使用以kie命名的配置中心。
  需要在项目中增加如下依赖：
  ```
  <dependency>
    <groupId>org.apache.servicecomb</groupId>
    <artifactId>config-kie</artifactId>
  </dependency>
  ```
  如果项目已经直接或者间接包含如上依赖，则无需添加。Java Chassis包含如[表2]所示配置项，这些配置项的值指定了微服务在配置中心的身份，以及微服务和配置中心之间的交互。
   表2Java Chassis常用配置项 
  | 配置项                                  | 含义                                          | 缺省值                 | 备注                                |
  |:---|:---|:---|:---|
  | servicecomb.service.application      | 所属应用                                        | default             | -                                 |
  | servicecomb.service.name             | 微服务名称                                       | defaultMicroservice | -                                 |
  | servicecomb.service.version          | 微服务版本                                       | 1.0.0.0             | -                                 |
  | servicecomb.service.environment      | 环境                                          | -                   | 取值为环境ID。如production，development等。 |
  | servicecomb.kie.serverUri            | kie访问地址，格式为http(s)://{ip}:{port}，以","分隔多个地址 | -                   | kie                               |
  | servicecomb.kie.firstRefreshInterval | 首次刷新配置项的时间间隔，单位为毫秒                          | 3000                | kie                               |
  | servicecomb.kie.refresh_interval     | 刷新配置项的时间间隔，单位为毫秒                            | 3000                | kie                               |
  | servicecomb.kie.domainName           | 应用的租户名称                                     | default             | kie                               |
     
  
Java Chassis有多种方式可以读取动态配置。
- 第一种是使用archaius API，例子如下：
  ```
  DynamicDoubleProperty myprop = DynamicPropertyFactory.getInstance()
    .getDoubleProperty("trace.handler.sampler.percent", 0.1);
  ```
  archaius API支持callback处理配置变更：
  ```
  myprop.addCallback(new Runnable() {
        public void run() {
            // 当配置项的值变化时，该回调方法会被调用
            System.out.println("trace.handler.sampler.percent is changed!");
        }
    });
  ```
  
- 第二种方式是使用Java Chassis提供的配置注入机制，使用这种方式能够非常简单地处理复杂配置，和配置优先级，例子如下：
  ```
  @InjectProperties(prefix = "jaxrstest.jaxrsclient")
    public class Configuration {
      /*
       * 方法的 prefix 属性值 "override" 会覆盖标注在类定义的 @InjectProperties
       * 注解的 prefix 属性值。
       *
       * keys属性可以为一个字符串数组，下标越小优先级越高。
       *
       * 这里会按照如下顺序的属性名称查找配置属性，直到找到已被配置的配置属性，则停止查找：
       * 1) jaxrstest.jaxrsclient.override.high
       * 2) jaxrstest.jaxrsclient.override.low
       *
       * 测试用例：
       * jaxrstest.jaxrsclient.override.high: hello high
       * jaxrstest.jaxrsclient.override.low: hello low
       * 预期：
       * hello high
       */
      @InjectProperty(prefix = "jaxrstest.jaxrsclient.override", keys = {"high", "low"})
      public String strValue;
  ```
  执行注入：
  ```
  ConfigWithAnnotation config = SCBEngine.getInstance().getPriorityPropertyManager()
        .createConfigObject(Configuration.class,
              "key", "k");
  ```
  
- 第三种方式在和Spring、Spring Boot集成的时候使用，可以按照Spring、Spring Boot的原生方式读取配置，比如@Value、@ConfigurationProperties。Java Chassis将配置层次应用于Spring Environment中，Spring和Spring Boot读取配置的方式，也能够读取到microservice.yaml和动态配置的值。 有关Java Chassis读取配置的更多内容，请参考[社区开发指南](https://servicecomb.apache.org/references/java-chassis/zh_CN/)。
  
 
