转自:https://zhuanlan.zhihu.com/p/37220140
一、configserver概述
springcloud系列自从上次发布一个概述后续再无更新,最近将会密集更新一些,最佳实践系列文章将主要以项目实际应用为主,对底层原理先不做分析。结合作者在项目中的一些实际经验都会写到最佳实践系列文章中。
本节内容主要讲一下configserver,配置服务在springcloud中主要起到一个给各个微服务提供配置的一个基础服务。在实际的应用中我们将整个项目环境从大方面分为:开发、测试、灰度、正式环境,针对不同的环境所使用的数据库、消息队列、redis等配置都是不一样的,这样我们就需要针对不同的环境准备一套配置文件,并能方便的管理。一般的做法有两种:
1)在项目中放配置文件,并根据不同的文件名区分不同的环境
2)集中配置,使用git等版本控制工具进行配置库统一管理(推荐)
configserver我们将使用git库进行配置文件的统一管理,而不放到具体的项目里面。
可以看到各个微服务访问configserver获取自己的配置文件,configserver作为代理服务从git获取最新的配置文件,配置文件可以在git服务器作为统一的管理,由相关人员进行修改更新。在实际项目中要注意,服务器的配置文件会在linxu /tmp/ 下有缓存文件,如果拉不到最新的配置文件可以将此目录删除。
二、configserver微服务搭建
微服务搭建比较简单,我们后续使用的环境为:
jdk: 1.8
springboot2.0
github示例:xiongyongjie/panda
1) 新建maven项目,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.springcloud</groupId>
<artifactId>configserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>configserver</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
2) 新建启动文件ConfigserverApplication.java
package com.springcloud.configserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigserverApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigserverApplication.class, args);
}
}
加入注解 @EnableConfigServer,用于开启此服务为一个配置服务。
3) 新建application.yml文件
spring:
application:
name: configserver
cloud:
config:
server:
git:
#basedir:
uri: https://github.com/xiongyongjie/springcloudproject.git
search-paths: config/${spring.cloud.config.profile}
default-label: master
username: ***
password: ***
#设置分支
label: master
#当前激活的文件
profile: test
server:
port: 7777
文件说明:
- uri:为配置文件的git服务地址
- search-paths:项目中的配置文件路径搜索地址,此处为: config/${spring.cloud.config.profile} 即: config/test 目录,此目录如下,请自行查看github:
xiongyongjie/springcloudproject
- default-label: master 此项配置的为git的版本分支此处为master分支。
- username、password 为从git获取配置文件需要的用户名密码,此处为我的github登陆用户名和密码(此处***代替)
4) 整个项目结构
完成上述配置后可以启动项目,运行ConfigserverApplication.java文件
5)验证
从浏览器访问项目并获取git服务器的配置文件
可以看到git上对应的配置文件信息,此处为一个示例。至此一个简单的configserver就搭建完成了。
访问规则:
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
- /{application}-{profile}.properties
- /{label}/{application}-{profile}.properties
访问说明:
1) 在这个例子中,我们使用的目录是 config/test 目录,所以文档 http://127.0.0.1:7777/configclien/test 时候会在git服务器目录找文件configserver-test.yml文件。
2) 访问方式换一下:
可以看到两种方式都能访问到配置文件信息。至此配置服务搭建完成,下一讲我们将基于本次搭建的配置服务作为配置服务器来构建eurake注册中心。