应用配置管理(Application Configuration Management,简称 ACM),其前身为淘宝内部配置中心 Diamond,是一款应用配置中心产品。基于该应用配置中心产品,您可以在微服务、DevOps、大数据等场景下极大地减轻配置管理的工作量的同时,保证配置的安全合规。
注:这以上为官方的介绍
在程序开发过程中,通常将程序中需要变更的一些配置项或者元数据(比如数据库配置、文件地址等)从代码中分离出来,放在单独的配置文件中进行管理,我们称这些配置文件为应用配置。
但是这些配置通常是不可变更的,变更后需要重启项目。而配置中心可以理解为,就是可以支持动态变更参数的客户端。
打开ACM 产品主页 https://www.aliyun.com/product/acm
登录账户并开通服务
<properties>
<java.version>1.8java.version>
<spring-boot.version>2.1.9.RELEASEspring-boot.version>
<spring-cloud.version>Greenwich.SR3spring-cloud.version>
<spring-cloud-starter-acm.version>1.10.0spring-cloud-starter-acm.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-acmartifactId>
<version>${spring-cloud-starter-acm.version}version>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>${spring-boot.version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
project>
获取方式:阿里云Acm控制台>> 命名空间详情 获取
说明:如果同时在 Spring Boot 应用的 application.properties 和 ACM 的 s p r i n g . a p p l i c a t i o n . g r o u p : {spring.application.group}: spring.application.group:{spring.application.name}.properties中配置了同一个 key,ACM 中的 value 会覆盖应用默认的 value。
注意:spring.application.group、spring.application.name、alibaba.acm.namespace
添加acm依赖后以上三个属性为必填不填会报错
spring.application.group=com.demo.acm.application.group
spring.application.name=dev-demo
#Acm 命名空间标识
alibaba.acm.namespace=xxx
#End Point公网访问
alibaba.acm.endpoint=acm.aliyun.com
#Acm 所在分组(如果 Group 不是 DEFAULT_GROUP,则需设置)
alibaba.acm.group=com.demo.acm.myGroup
# 如果是加密配置,则添加下面两行进行自动解密
# alibaba.acm.openKMSFilter=true
# regionId 可以通过命名空间详情中的区域 ID 获取
# alibaba.acm.regionId=xxx
#阿里云 accessKey
alibaba.acm.accessKey=xxx
#阿里云 secretKey
alibaba.acm.secretKey=xxx
前往 ACM 控制台,在相应的命名空间(namespace)下新建配置。
Data ID 按照以下约定格式编写:
s p r i n g . a p p l i c a t i o n . g r o u p : {spring.application.group}: spring.application.group:{spring.application.name}.properties
例如:com.alibaba.cloud.acm:dev-demo.properties
1)自定义 DataID 名称 示例:com.demo.acm.application.group:dev-demo.properties
2)自定义分组grop名称 示例:com.demo.acm.myGroup
3)选择配置文件类型 示例:properties
4)添加配置内容
注:默认 分组Group 是 DEFAULT_GROUP
Spring Cloud ACM 支持 Spring Cloud 的 Refresh Scope 特性。
标记了 @RefreshScope 注解的 Bean 会自动监听 ACM 服务端的变更,并在运行时自动更新配置
示例
启动类
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
测试controller
@RestController
public class TestController {
private ApplicationParam applicationParam;
private UserConfigParam userConfigParam;
@Autowired
public TestController(ApplicationParam applicationParam, UserConfigParam userConfigParam) {
this.applicationParam = applicationParam;
this.userConfigParam = userConfigParam;
}
@PostMapping(value = "/")
public String HelloWorld() {
return "HelloWorld stat success";
}
@RequestMapping("/hello")
public String HelloWorldAll() {
return "Hello world AppId= " + applicationParam.getAppId() + ", AppName=" + applicationParam.getAppName();
}
@RequestMapping("/user-config")
public String userConfig() {
return "Hello user userId= " + userConfigParam.getUserId() + ", userName=" + userConfigParam.getUserName();
}
}
注:支持项目启动状态下更改参数。并热部署
我这里吧base.appId=A001 改成 base.appId=A002测试一下
由于您购买的机器可能分布在不同的地域,因此使用配置管理服务之前,需要先确定要将配置发送到哪个地域。
源码DEMO地址
关注程序员小强公众号更多编程趣事,知识心得与您分享