动态配置(DRM)功能是基于 SOFABoot 工程实现的。本文介绍如何快速实现动态配置。
前提条件
配置步骤
在本地开发应用。
在 SOFABoot 工程的待创建动态配置类的模块中,添加下述依赖:
<dependency> <groupId>com.alipay.sofa</groupId> <artifactId>ddcs-enterprise-sofa-boot-starter</artifactId> </dependency>
您无需关注该依赖版本。
进行安全配置。
为保障中间件的安全性,所有的调用均需要验证访问者的身份。配置方式,请参考 引入 SOFA 中间件。
创建动态配置类。
配置类代码示例:
@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 的规范,有若干私有属性,属性有对应的
get
和set
方法。例如上面的name
、age
、man
称为资源属性,资源属性只允许String
和基本类型。在配置类上加上
@DObject
注解,它的包名是com.alipay.drm.client.api.annotation
。@DObject
需要提供id
、region
、appName
属性。id
:是全站唯一的字符串,一般用全类名来保证唯一,如不设值,则默认为全类名。region
:用于区分不同组织的域,如可为每个子公司设定独立域。appName
:是应用名。
在资源属性上加上
@DAttribute
注解,包名同样是com.alipay.drm.client.api.annotation
。动态配置框架将通过反射的方式调用
get
、set
方法,从而读写资源属性。在特殊应用场景下,允许改变get
、set
方法的内容,但是不可以修改方法的形式(方法名、参数、返回值)。因为系统启动时动态配置框架会检查该属性是否符合 Java Bean 的规范,如果不符合,会跳过注册这个属性。提供两个可选的注解
@BeforeUpdate
,@AfterUpdate
。如果需要在每个属性更新前或更新后执行统一的操作,例如打印日志,可以提供参数(String,Object)
和无返回值的方法,并打上相应注解。说明这两个方法被调用时,传入的参数都是属性名和本次 set 方法的入参,并不是对应的私有属性更新前和更新后的值。这两个方法只适合用来执行打日志等次要任务,真正的业务逻辑要放在 set 方法中。
调用
register
方法注册到动态配置客户端后,即可享受服务端动态修改数据后的秒级推送能力。
进行 xml 配置。
示例如下:
<bean id="dynamicConfig" class="com.antcloud.tutorial.configuration.tutorial.config.DynamicConfig" init-method="init"/>
启动应用。
启动应用,分为 2 种情形:
本地启动:启动本地开发所完成的 SOFABoot 工程。
云端启动:将本地工程打包后发布到云端启动,详情请参见 云端发布。
配置云端动态配置。
前往微服务控制台进行动态配置项的创建、管理与推送操作,实现在不重启应用的情况下,完成配置的动态更新。详情参见 新增动态配置 和 推送动态配置。