springcloud最佳实践系列[1]--configserver

转自: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

xiongyongjie/panda​github.com图标

github 代码

 

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​github.com图标

  • 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 目录,所以文档  时候会在git服务器目录找文件configserver-test.yml文件。

2) 访问方式换一下:

可以看到两种方式都能访问到配置文件信息。至此配置服务搭建完成,下一讲我们将基于本次搭建的配置服务作为配置服务器来构建eurake注册中心。

原文地址:https://www.cnblogs.com/sharpest/p/13706442.html