动态配置快速入门

动态配置(DRM)功能是基于 SOFABoot 工程实现的。本文介绍如何快速实现动态配置。

前提条件

  • 已完成环境配置,配置详情请参见 搭建环境

  • 已下载 示例工程,并将示例工程主 pom.xml 文件的 SOFABoot 版本号改为最新版。SOFABoot 版本信息,请参见 版本说明

配置步骤

  1. 在本地开发应用。

    1. 在 SOFABoot 工程的待创建动态配置类的模块中,添加下述依赖:

      <dependency>
           <groupId>com.alipay.sofa</groupId>
           <artifactId>ddcs-enterprise-sofa-boot-starter</artifactId>
      </dependency>

      您无需关注该依赖版本。

    2. 进行安全配置。

      为保障中间件的安全性,所有的调用均需要验证访问者的身份。配置方式,请参考 引入 SOFA 中间件

    3. 创建动态配置类。

      配置类代码示例:

      @DObject(region ="AntCloud", appName ="dynamic-configuration-tutorial", id ="com.antcloud.tutorial.configuration.DynamicConfig")
          public class DynamicConfig{
      
              @DAttribute
              private String name;
      
              @DAttribute
              private int age;
      
              @DAttribute
              private boolean man;
      
              public void init(){
                  DRMClient.getInstance().register(this);
              }
      
              public String getName(){
                  return name;
              }
      
              public void setName(String name){
                  this.name = name;
              }
      
              public int getAge(){
                  return age;
              }
      
              public void setAge(int age){
                  this.age = age;
              }
      
              public boolean isMan(){
                  return man;
              }
      
              public void setMan(boolean man){
                  this.man = man;
              }
          }

      代码说明:

      • 该配置类是一个普通的 Java 类,要符合 Java Bean 的规范,有若干私有属性,属性有对应的 getset 方法。例如上面的 nameageman 称为资源属性,资源属性只允许 String 和基本类型。

      • 在配置类上加上 @DObject 注解,它的包名是 com.alipay.drm.client.api.annotation@DObject 需要提供 idregionappName 属性。

        • id:是全站唯一的字符串,一般用全类名来保证唯一,如不设值,则默认为全类名。

        • region:用于区分不同组织的域,如可为每个子公司设定独立域。

        • appName:是应用名。

      • 在资源属性上加上 @DAttribute 注解,包名同样是 com.alipay.drm.client.api.annotation

      • 动态配置框架将通过反射的方式调用 getset 方法,从而读写资源属性。在特殊应用场景下,允许改变 getset 方法的内容,但是不可以修改方法的形式(方法名、参数、返回值)。因为系统启动时动态配置框架会检查该属性是否符合 Java Bean 的规范,如果不符合,会跳过注册这个属性。

      • 提供两个可选的注解 @BeforeUpdate@AfterUpdate。如果需要在每个属性更新前或更新后执行统一的操作,例如打印日志,可以提供参数 (String,Object) 和无返回值的方法,并打上相应注解。

        说明

        这两个方法被调用时,传入的参数都是属性名和本次 set 方法的入参,并不是对应的私有属性更新前和更新后的值。这两个方法只适合用来执行打日志等次要任务,真正的业务逻辑要放在 set 方法中。

      • 调用 register 方法注册到动态配置客户端后,即可享受服务端动态修改数据后的秒级推送能力。

    4. 进行 xml 配置。

      示例如下:

      <bean id="dynamicConfig" class="com.antcloud.tutorial.configuration.tutorial.config.DynamicConfig" init-method="init"/>
  2. 启动应用。

    启动应用,分为 2 种情形:

    • 本地启动:启动本地开发所完成的 SOFABoot 工程。

    • 云端启动:将本地工程打包后发布到云端启动,详情请参见 云端发布

  3. 配置云端动态配置。

    前往微服务控制台进行动态配置项的创建、管理与推送操作,实现在不重启应用的情况下,完成配置的动态更新。详情参见 新增动态配置推送动态配置