简要说明
此服务非必要,主要功能就是在远程环境上集中管理项目的配置文件,远程配置并非最好的选择,会导致一些变量加载的问题,所以此服务非必须服务,可自行选择是否搭建
服务端
1. 主要依赖
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>com.fatcat</groupId>
<artifactId>fc-config</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>fc-config</name>
<description>远程仓库配置中心</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<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>
2. 关键配置
# 自身服务端口和名称配置
server.port=8888 spring.application.name=fc-config
# eureka 配置
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
# 配置中心不需要检索其他服务
eureka.client.fetch-registry=false
eureka.instance.lease-renewal-interval-in-seconds=30
eureka.instance.lease-expiration-duration-in-seconds=60
# 配置中心服务的相关设置
# 仓库地址(不要加.git)
spring.cloud.config.server.git.uri=*****
# 分支名称
spring.cloud.config.server.git.default-label=develop
# 强制拉取
spring.cloud.config.server.git.force-pull=true
# 搜索路径,即配置文件所在路径
spring.cloud.config.server.git.search-paths=fc-static
# git账号和密码
spring.cloud.config.server.git.username=***** spring.cloud.config.server.git.password=*****
# 指定本地缓存配置文件的路径
spring.cloud.config.server.git.basedir=/usr/local/fatcat/config
客户端
1. 主要依赖
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<artifactId>fc-search</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>fc-search</name>
<dependencies>
<!-- WEB-MVC 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 全局更换服务器为 jetty,更轻量 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!-- EUREKA 注册中心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- CONFIG 远程配置 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
</project>
2. 关键配置
# 读取远程配置
spring.cloud.config.discovery.enabled=true
# config服务的名称
spring.cloud.config.discovery.service-id=fc-config
# config服务的地址
spring.cloud.config.uri=lb://fc-config
# 读取的仓库分支
spring.cloud.config.label=develop
# 读取的文件名称
spring.cloud.config.name=fc-search
# profile表示对应的环境(文件后缀),如fc-search、fc-search-dev、fc-search-test
#spring.cloud.config.profile=default
使用方法
远程配置服务启动后,通过 ip:port/{service-name}-{profile}.yaml 即可访问到配置文件中的属性值,仅显示远程配置文件中的配置属性;后缀名可选:yaml、yml、xml、properties
注意事项
1.spring 对配置文件的加载顺序如下:本地 bootstrap -> 本地 application -> 远程 指定name(或服务名)文件 -> 远程 application
2.spring 会优先加载本地配置(废话!不优先加载本地文件怎么可能知道远程配置的地址呢?), 然后获取到远程配置地址后读取远程配置文件,根据指定的name读取,不指定默认为服务的名称,如果远程配置中存在 application 的文件也会默认加载;加载完全部配置文件后通过 refreshContext() 方法将远程配置文件优先级置于最高,同名属性优先级高的生效
3.最后对于同名属性生效的顺序: 远程服务名对应的文件 > 远程 application > 本地 application > 本地 bootstrap
4.以上关于配置的结论仅针对于 springcloud 工程有效;单独的 springboot 项目不存在远程配置和本地 bootstrap 文件,仅 application 生效.
补充说明
总结:配置的加载顺序和生效顺序相反,同名配置后加载的生效;
加载顺序: bootstarp -> application -> 远程配置;
同名属性生效优先级:远程配置 > 本地。