SpringBoot整合阿里云ACM应用配置服务实现动态配置

1.什么是ACM?

应用配置管理(Application Configuration Management,简称 ACM),其前身为淘宝内部配置中心 Diamond,是一款应用配置中心产品。基于该应用配置中心产品,您可以在微服务、DevOps、大数据等场景下极大地减轻配置管理的工作量的同时,保证配置的安全合规。

注:这以上为官方的介绍

2.什么是应用配置?

在程序开发过程中,通常将程序中需要变更的一些配置项或者元数据(比如数据库配置、文件地址等)从代码中分离出来,放在单独的配置文件中进行管理,我们称这些配置文件为应用配置。

但是这些配置通常是不可变更的,变更后需要重启项目。而配置中心可以理解为,就是可以支持动态变更参数的客户端。

3.开通阿里云Acm服务

打开ACM 产品主页 https://www.aliyun.com/product/acm
登录账户并开通服务

4.阿里云Acm控制台

4.1主页截图
​​
SpringBoot整合阿里云ACM应用配置服务实现动态配置_第1张图片

4.2命名空间详情
​​SpringBoot整合阿里云ACM应用配置服务实现动态配置_第2张图片

5.添加Maven依赖

<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>

6.配置文件application.properties

获取方式:阿里云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

7.在ACM控制台新建应用配置

前往 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

图示:
SpringBoot整合阿里云ACM应用配置服务实现动态配置_第3张图片

1)自定义 DataID 名称 示例:com.demo.acm.application.group:dev-demo.properties

2)自定义分组grop名称 示例:com.demo.acm.myGroup

3)选择配置文件类型 示例:properties

4)添加配置内容

注:默认 分组Group 是 DEFAULT_GROUP

8.自动更新配置类

Spring Cloud ACM 支持 Spring Cloud 的 Refresh Scope 特性。
标记了 @RefreshScope 注解的 Bean 会自动监听 ACM 服务端的变更,并在运行时自动更新配置
示例
SpringBoot整合阿里云ACM应用配置服务实现动态配置_第4张图片​​

9.ACM配置示例

SpringBoot整合阿里云ACM应用配置服务实现动态配置_第5张图片

10.启动与测试

启动类

@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();
    }

}

SpringBoot整合阿里云ACM应用配置服务实现动态配置_第6张图片SpringBoot整合阿里云ACM应用配置服务实现动态配置_第7张图片

11.配置值热部署

注:支持项目启动状态下更改参数。并热部署
我这里吧base.appId=A001 改成 base.appId=A002测试一下
SpringBoot整合阿里云ACM应用配置服务实现动态配置_第8张图片SpringBoot整合阿里云ACM应用配置服务实现动态配置_第9张图片

12.区域问题 ​​

SpringBoot整合阿里云ACM应用配置服务实现动态配置_第10张图片

由于您购买的机器可能分布在不同的地域,因此使用配置管理服务之前,需要先确定要将配置发送到哪个地域。

源码DEMO地址

关注程序员小强公众号更多编程趣事,知识心得与您分享
在这里插入图片描述

你可能感兴趣的:(阿里云,配置中心)