如何从Spring Cloud Config迁移到阿里云ACM

从零开始使用Spring Cloud Config中,我们简单了解了下Spring Cloud Config,它提供了一套配置管理的解决方案。

但是Spring Cloud Config需要自己搭建config-server,还需要结合eureka来实现高可用;如果需要实时更新配置,还需要Spring Cloud Bus。实在是过于繁琐。

而阿里云ACM(应用配置管理)则提供了一整套完整的解决方案:

  1. 与Spring生态紧密集成
    和Spring Cloud Config一样,ACM通过Envirment和PropertySource与Spring结合。
  2. 配置简单
    只需要在ACM上开一个namespace,然后配置client,就能享受到获取配置、自动更新配置功能。
  3. 免费

阿里云ACM相比与Spring Cloud Config,提供了一揽子配置解决方案,不需要在借助Spring Cloud Bus和eureka了。

我们以上一篇文章中的spring-cloud-config-client作为示例。

迁移配置文件

在使用ACM之前,我们需要将现有的配置迁移到ACM中,要不然直接切换过去没法获取任何配置,会导致应用无法正常运行。

为每个环境(此处的环境就是Spring中的profile)创建一个ACM的命名空间。

比如dev对应namespace dev,test对应test命名空间。

然后对应环境的配置项迁移到ACM对应的命名空间中,DataId格式为:

${application.name}-${prifile}.${spring.cloud.nacos.config.file-extension}

配置内容为配置文件的内容。

此处也可以自定义spring.cloud.nacos.config.prefix,DataId格式就变为${spring.cloud.nacos.config.prefix}-${prifile}.${spring.cloud.nacos.config.file-extension}

比如上一篇文章中的neo-config-dev.properties这个配置,就可以直接在dev命名空间中添加对应配置:

DataId: spring-cloud-config-client-dev.properties
Group:DEFAULT_GROUP
配置格式: Properties
配置内容: neo.hello=hello im dev update3

配置client

由于ACM的接口和nacos的接口兼容,所以可以直接使用nacos库来读取ACM配置。

在spring-cloud-config-client应用的pom.xml文件中,
去掉org.springframework.cloud:spring-cloud-starter-config依赖,并添加依赖:

1
2
3
4
5
6
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<!-- spring-boot 1.5.x对应的版本号 -->
<version>1.5.1.RELEASE</version>
</dependency>

修改配置文件bootstrap.properties

bootstrap.properties
1
2
# 表示切换某个profiles,决定读取bootstrap-${spring.profiles.active}.properties
spring.profiles.active=dev

然后添加某个profile对应的bootstrap.properties文件,比如以dev环境为例:

bootstrap-dev.properties
1
2
3
4
5
6
7
8
9
10
11
# 在命名空间详情处可以获取到 endpoint 和 namespace 的值
spring.cloud.nacos.config.endpoint=acm.aliyun.com
spring.cloud.nacos.config.namespace=07adbe98-6020-4b6e-a3ce-xxxxxxxx

# RAM 账户的 accessKey 和 secretKey
spring.cloud.nacos.config.access-key=LTAI4G1MFEWXkyyyyyyy
spring.cloud.nacos.config.secret-key=OxlXebPOYdYVA1mzzzzzzzzzz

# 指定配置的后缀,支持 properties、yaml、yml,默认为 properties
spring.cloud.nacos.config.file-extension=properties
#spring.cloud.nacos.config.file-extension=yaml

然后启动,访问http://localhost:8002/hello,就能看到配置生效了:

修改配置

在ACM控制台上修改配置,然后提交:

再次访问http://localhost:8002/hello,就能看到配置已经是最新的了:

其他功能

除了最基本的配置推送,ACM还提供了很多功能:

监听查询

在ACM控制台上,还可以看到有多少进程在监听这个配置,方便了解配置修改的影响面:

配置审计

在ACM控制台上,可以看到配置的变更历史,方便审计和回退:

推送轨迹

在ACM控制台上,也可以看到配置的推送轨迹,可以精确的知道配置项的生效时间:

迁移标准流程

如果你需要从Spring Cloud Config迁移到ACM,这儿有一个标准流程:

  1. 将各个环境/profile中的配置文件导入到ACM中
  2. 修改项目的pom.xml
  3. 配置bootstrap.properties和bootstrap-${prifile}.properties
  4. 验证并上线

参考资料

本文的示例代码在 GitHub

作者

Robert Lu

发布于

2020-09-06

许可协议

评论