上节我们分别在订单、商品中有相应的配置文件,本节我们修改为通过注册中心获取配置文件。
创建注册中心服务端
新建mvn项目
pom.xml引入依赖
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.joery.config</groupId>
<artifactId>joery-config</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!--springboot 整合eureka客户端-->
<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>Finchley.SC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
我们使用git仓库存储配置文件,我的为码云:
创建git仓库:https://gitee.com/newcompany/joery-cloud-config.git
配置文件命名规范
这里的application可以自定义为其它的名称,这里可以用应用的名称,即应用名,后边的dev、stable、prod这些都可以视为一个应用下多个不同的配置文件,可以当做环境名,以下均用环境名代称。
Config支持我们使用的请求的参数规则为:
/ { 应用名 } / { 环境名 } [ / { 分支名 } ]
/ { 应用名 } - { 环境名 }.yml
/ { 应用名 } - { 环境名 }.properties
/ { 分支名 } / { 应用名 } - { 环境名 }.yml
/ { 分支名 } / { 应用名 } - { 环境名 }.properties
创建
goods-dev.yml商品服务配置文件并且提交到git服务器
创建注册中心的配置文件
#端口
server:
port: 8093
# 配置 Spring Cloud Config Server应用名
spring:
application:
name: config-server
cloud:
config:
server:
git:
#search-paths: test #git 搜索的相对路径
#uri: https://gitee.com/newcompany/joery-cloud-config
uri: https://github.com/joeryliang/cloudconfig
force-pull: true #设置强行pull拉取
username: 你的账号
password: 你的密码
search-paths: /**
#注册中心地址
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8091/eureka
创建启动文件并添加@EnableConfigServer注解
package com.joery.joeryconfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class JoeryConfigApp {
public static void main(String[] args) {
SpringApplication.run(JoeryConfigApp.class,args);
}
}
启动服务并访问如下地址则试:
1、http://127.0.0.1:8093/goods/dev.yml
2、http://127.0.0.1:8093/goods-dev.yml
注意:这里开始上传的文件名为goods.yml,没有使用goods-dev.yml,然后启动了务后通过http://127.0.0.1:8093/goods.yml一直无以访问,报404错误,后来增加上 环境名就可以了。
微服务客户端引用注册中心配置
修改商品服务pom.xml,引入配置依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
修改原商品服务application.yml为bootstrap.yml
注:之所以要用bootstrap.yml,是因为启动SpringBoot项目时,会优先读取bootstrap.yml里的配置,然后才会读取application.yml。如果不通过bootstrap.yml里的配置,先从配置中心拉下相应的配置文件,就会报错。
bootstrap.yml配置eureka和config相关信息
###服务端口号(本身是一个web项目)
server:
port: 8080
###起个名字作为服务名称(该服务注册到eureka注册中心的名称,比如商品服务)
spring:
application:
name: app-goods
cloud:
config:
discovery:
enabled: true
service-id: config-server # 注册中心的服务名
name: goods
profile: dev # 指定配置文件的环境
###服务注册到eureka注册中心的地址
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8091/eureka
###因为该应用为服务提供者,是eureka的一个客户端,需要注册到注册中心
register-with-eureka: true
###是否需要从eureka上检索服务
fetch-registry: true
此时,系统就会根据配置到服务端查找相应的配置文件了。
同理在order服务增加,分别设l置如下4个配置
分别在Controll增中读取配置进行测式;
预览结果
信息可以被正确读取