如何从Spring Cloud Config迁移到阿里云ACM
在从零开始使用Spring Cloud Config中,我们简单了解了下Spring Cloud Config,它提供了一套配置管理的解决方案。
但是Spring Cloud Config需要自己搭建config-server,还需要结合eureka来实现高可用;如果需要实时更新配置,还需要Spring Cloud Bus。实在是过于繁琐。
而阿里云ACM(应用配置管理)则提供了一整套完整的解决方案:
- 与Spring生态紧密集成
和Spring Cloud Config一样,ACM通过Envirment和PropertySource与Spring结合。 - 配置简单
只需要在ACM上开一个namespace,然后配置client,就能享受到获取配置、自动更新配置功能。 - 免费
阿里云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 | <dependency> |
修改配置文件bootstrap.properties
:
1 | # 表示切换某个profiles,决定读取bootstrap-${spring.profiles.active}.properties |
然后添加某个profile对应的bootstrap.properties文件,比如以dev环境为例:
1 | # 在命名空间详情处可以获取到 endpoint 和 namespace 的值 |
然后启动,访问http://localhost:8002/hello
,就能看到配置生效了:
修改配置
在ACM控制台上修改配置,然后提交:
再次访问http://localhost:8002/hello
,就能看到配置已经是最新的了:
其他功能
除了最基本的配置推送,ACM还提供了很多功能:
监听查询
在ACM控制台上,还可以看到有多少进程在监听这个配置,方便了解配置修改的影响面:
配置审计
在ACM控制台上,可以看到配置的变更历史,方便审计和回退:
推送轨迹
在ACM控制台上,也可以看到配置的推送轨迹,可以精确的知道配置项的生效时间:
迁移标准流程
如果你需要从Spring Cloud Config迁移到ACM,这儿有一个标准流程:
- 将各个环境/profile中的配置文件导入到ACM中
- 修改项目的pom.xml
- 配置bootstrap.properties和bootstrap-${prifile}.properties
- 验证并上线
参考资料
本文的示例代码在 GitHub。
如何从Spring Cloud Config迁移到阿里云ACM
https://robberphex.com/how-to-migrate-to-aliyun-acm-from-spring-cloud-config/