# spring-cloud-trip-config
**Repository Path**: iherr/spring-cloud-trip-config
## Basic Information
- **Project Name**: spring-cloud-trip-config
- **Description**: No description available
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2018-10-09
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### 一、Spring Cloud Config
Spring Cloud Config为Spring Cloud子项目,提供一套分布式的配置管理方案,[『官方文档传送门』](http://cloud.spring.io/spring-cloud-config/single/spring-cloud-config.html)
分为服务端Config Server和客户端Config Client,其中Server端连接git或svn,并对外提供配置信息服务。Client端从Server端获取配置信息。当配置变更时,只需要借助git的push操作来触发更新操作。
### 二、Spring Cloud Config Server
> git配置文件
首先需要在git上放置一些yml或properties文件,命名规则如下:
application用于Client端连接时配置的application.name,用于过滤配置文件。profile用于Client端连接时配置的spring.cloud.config.profile,用于区分生产测试等不同环境。label一般都master,代表分支。
``` bash
配置文件命名规则如下:
* /{application}/{profile}[/{label}]
* /{application}-{profile}.yml
* /{label}/{application}-{profile}.yml
* /{application}-{profile}.properties
* /{label}/{application}-{profile}.properties
```
按照以上规则,我们配置了3个yml文件如下(也可使用properties文件):
1、herr.yml
```
server.port: 8082
#远程配置,默认8082
profile: herr-default
```
2、herr-dev.yml
```
#server.port=8082
#不设置server.port,则以herr.yml的8082为default
profile: herr-dev
```
3、herr-pro.yml
```
server.port: 8086
profile: herr-pro
```
> Server端搭建
1、pom.xml依赖
``` java
org.springframework.cloud
spring-cloud-config-server
org.springframework.boot
spring-boot-starter-security
```
2、application入口类添加注解@EnableConfigServer
3、application.yml配置
``` xml
server:
port: 8100
spring:
application:
name: config
http:
encoding:
charset: UTF-8
enabled: true
force: true
cloud:
config:
label: master #为默认分支
server:
git:
#用于连接本地gitlab,需要密码
#uri: http://127.0.0.1:10080/root/config.git
#username: root
#password: 12345678
#用于连接码云
uri: https://gitee.com/iherr/spring-cloud-trip-config.git
searchPaths: config-git-static #如配置文件不在根目录,则需要设置文件夹路径
security:
user:
password: 1a1a2b2b3c3c4d4d
#如需要密码,需要pom添加security依赖,否则不起作用
```
> 运行并测试
使用浏览器访问,查看数据是否正常,如有找不到的属性,会默认去{application}.properties或[.yml]找。
``` bash
#以下url都可以访问,如启用了密码,会弹出页面需要输入密码,默认用户名为user:
http://localhost:8100/herr-pro.properties
http://localhost:8100/herr-dev.properties
http://localhost:8100/herr-pro.yml
http://localhost:8100/herr-dev.yml
http://localhost:8100/master/herr-dev.properties
```
### 三、Spring Cloud Config Client
> Client端搭建
1、pom.xml依赖
```bash
org.springframework.cloud
spring-cloud-starter-config
```
2、接口实现:profile接口,从配置文件中获取profile并显示
```
@RestController
public class HelloController {
@Value("${profile}")
private String profile;
@GetMapping("/profile")
public String getProfile(){
return this.profile;
}
}
```
3、提供默认application.yml文件
```
server:
port: 8080
profile: default
#如果不需要bootstrap.yml,可将spring.cloud.config.uri在EditConfiguration中override parameter中设置,打开注释设置其余参数
#spring:
# cloud:
# config:
# profile: dev #如不设置,则走default
# label: master
# name: herr
```
4、提供初始化文件bootstrap.yml(名称不能改,默认),必须要这个文件,不然运行初始化时找不到server地址,会使用默认8888端口来获取server。
如省略掉该环节,会发现启动Client模块出现错误,报错信息为:Fetching config from server at: http://localhost:8888 等。SpringCloud里面有个“启动上下文”,主要是用于加载远端的配置,也就是加载Server里面的配置,默认加载顺序为:加载bootstrap.yml里面的配置 --> 链接Server,加载远程配置 --> 加载application.yml里面的配置;
```
spring:
cloud:
config:
#uri: http://127.0.0.1:8100
uri: http://user:1a1a2b2b3c3c4d4d@127.0.0.1:8100
#区分是否输入密码,密码为server端配置
profile: pro #如不设置,则走default
label: master
name: herr #取 herr-dev.yml 这个文件的 application 名字,即为 herr 名称
# application: #application.name和spring.cloud.config.name字段相同
# name: herr
```
如确实不想要bootstrap.yml文件,可将spring.cloud.config.uri在EditConfiguration中override parameter中设置,或者通过代码在入口main函数中代码设置。
```java
public static void main(String[] args) {
if (StringUtils.isBlank(System.getProperty("spring.cloud.config.uri"))) {
System.setProperty("spring.cloud.config.uri", "http://user:1a1a2b2b3c3c4d4d@127.0.0.1:8100");
}
System.out.println(System.getProperty("spring.cloud.config.uri"));
SpringApplication.run(ConfigClientApplication.class, args);
}
```
5、运行并测试
由于配置的application.name为herr,profile为pro,因此会自动先去找herr-pro.yml[.properties]文件,查到server.port为8086,profile为herr-pro,因此访问的地址为:http://localhost:8086/profile 返回的文字为herr-pro。可修改这两个参数做其他验证。
> 额外说明
哪怕第4步项目application.yml有server.port为8082,profile为 test1。在Server服务启动的时候,bootstrap拿到远端配置注入到profile的属性中的话,那么就不会再次覆盖这个属性了,所以只会选择远端配置的内容。
### 四、相关代码
[『代码传送门』](https://gitee.com/iherr/spring-cloud-trip-config)