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

1.什么是ACM?

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

注:这以上为官方的介绍

2.什么是应用配置?

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

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

3.开通阿里云Acm服务

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

4.阿里云Acm控制台

4.1主页截图
​​
在这里插入图片描述

4.2命名空间详情
​​在这里插入图片描述

5.添加Maven依赖

<properties>
        <java.version>1.8</java.version>
        <spring-boot.version>2.1.9.RELEASE</spring-boot.version>
        <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
        <spring-cloud-starter-acm.version>1.10.0</spring-cloud-starter-acm.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-acm</artifactId>
            <version>${spring-cloud-starter-acm.version}</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </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

图示:
在这里插入图片描述

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 服务端的变更,并在运行时自动更新配置
示例
在这里插入图片描述​​

9.ACM配置示例

在这里插入图片描述

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

}

在这里插入图片描述在这里插入图片描述

11.配置值热部署

注:支持项目启动状态下更改参数。并热部署
我这里吧base.appId=A001 改成 base.appId=A002测试一下
在这里插入图片描述在这里插入图片描述

12.区域问题 ​​

在这里插入图片描述

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

源码DEMO地址

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值