# springboot-config **Repository Path**: vchar_fred/springboot-config ## Basic Information - **Project Name**: springboot-config - **Description**: springboot 自定义配置中心的实现,包括通过阿里云的ACM配置中心来处理或者使用远程git仓库来拉取、读取文件等等配置 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2020-03-30 - **Last Updated**: 2022-09-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Springboot 自定义配置中心 [![build status](https://img.shields.io/badge/build-2.0-green)]() [![jdk](https://img.shields.io/badge/jdk-1.8-green)]() [![spring--boot](https://img.shields.io/badge/spring--boot-2.1.9-green)]() [![spring--cloud](https://img.shields.io/badge/config--center-acm-green)]() 当前只有SpringCloud有一个使用git仓库做的配置中心组件,但是对于不使用微服务或者是只是使用Springboot时就没法操作了; 因此可以参考SpringCloud的配置中心实现的原理来实现一个适合Springboot的轻量级配置中心。 ## 一、通过阿里云的ACM产品做配置中心 * [阿里云ACM免费开通使用](https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=yk3sqxxe) * [阿里云ACM文档](https://help.aliyun.com/product/59604.html) 阿里云官方提供的工具包只有Java直接使用的以及spring cloud才可以使用的包,还有个是使用阿里云的nocos配置中心的sdk包。 但是如果就只是使用Springboot时则需要自己去实现; spring-boot-starter-acm-config 是一个借鉴阿里云官方提供的sdk包进行重新封装的包;实现在springboot启动时,创建相关资源前,读取远程的配置来替换本地配置的效果; 使我们打的jar包或者是war包可以一次打包即可,其他相关配置通过读取远程的配置来处理。 如:将数据库、redis等配置放在ACM配置中心中。 ### 如何使用 在springboot项目中引入spring-boot-starter-acm-config项目(记得本地自己编译哦) top.vchar.alibaba spring-boot-starter-acm-config 2.0-SNAPSHOT 在springboot的application.yml或者application.properties等启动配置文件中配置ACM相关配置 alibaba: acm: group: DEFAULT_GROUP endpoint: acm.aliyun.com namespace: your namespace access-key: your access-key secret-key: your secret-key # 配置dataId必须添加文件后缀,支持properties或yml文件 application-data-id: your start properties file data id # 对于properties或yml文件dataId必须添加文件后缀;多个使用英文逗号分隔 data-id-list: dev.redis.yml,dev-druid-mysql.yml # 默认环境变量配置优先,若设置为false则会将环境变量中的值替换为配置文件中的值 vm-priority: true 之后启动springboot项目即可 也可以通过Java启动参数来设置 -Dalibaba.acm.application-data-id 设置 application-data-id -Dalibaba.acm.data-id-list 设置 data-id-list -Dalibaba.acm.group 设置 group -Daddress.server.domain 设置 endpoint -Dtenant.id 设置 namespace -Dram.role.name 设置 授权用户名 -Dalibaba.acm.access-key 设置 access-key -Dalibaba.acm.secret-key 设置 secret-key > role.name优先级高于access-key和secret-key 注意jvm 环境设置优先级高于配置文件中的配置 #### 注意 ##### a.在本地使用HSF服务时注意在启动时添加如下jvm启动参数 -Daddress.server.domain=endpoint 如: -Daddress.server.domain=acm.aliyun.com #### b.使用阿里云的EDAS和SEA时的区别 在EDAS或ECS服务器时不需要配置相关账号信息,只需要对对应的服务器授权即可,在程序启动时阿里云会自动注入相关账户信息;只需要配置要加载的配置文件即可; SEA目前不支持ACM自动授权,因此若是jar包启动则需要设置启动参数(acm的sdk包默认jvm启动参数优先级最高);若是war包则需要设置vm-priority为false,并springboot的配置文件中设置账户信息,工具包将会覆盖阿里云自动注入信息; ### 实现原理 实现``org.springframework.boot.env.EnvironmentPostProcessor``接口,在```postProcessEnvironment```中做配置更新, 同时设置排序序号大于```org.springframework.boot.context.config.ConfigFileApplicationListener```的序号,让在其之后加载配置信息,保证新修改的配置能够不被覆盖。 同时创建一个spring.factories文件,在里面配置如下信息,让springboot可以去扫描到 # Environment Post Processors org.springframework.boot.env.EnvironmentPostProcessor=top.vchar.alibaba.acm.ACMConfigEnvironmentPostProcessor