SpringCloud入门:(1)Spring Cloud Config Server

前言
        最近遇到个项目,总是不知道配置文件在哪,于是干脆把我不认识的技术作为关键字去搜索了一番。感谢开源、感谢网友的无私分享。经过了多次的尝试,甚至官方文档都抠出来了,终于做出来了像网友所描述的效果。
        在这里把我所遇到的坑记录下来,方便自己也方便他人。

理论

        分布式配置管理是分布式系统和微服务应用的第一步。目的是把各个应用的配置信息集中管理。
        因为一般上服务会分为开发、测试、生产等不同的维度。很容易导致开发环境与生产环境配置信息的不一致,或者管理复杂。
        Spring 配置管理模块,可以把一些启动参数进行外部配置。 要使用spring cloud分布式配置文件总体上分为3个大的步骤,首选你需要创建存放配置文件的仓库,然后创建一个配置文件服务器,该服务器将配置文件信息转化为rest接口数据,然后创建一个应用服务,该服务演示使用分布式配置文件信息

输入图片说明

        在做每一件事的时候,都有个坑,那就是 为什么要这么做呢?好处是什么? 回答不出这个问题就找不到去做的动力和意义。
        我也去找了下答案。
        大致理由就是:分布式项目,每个项目都会有很多的配置文件啊,那些数据库连接配置啊、国际化配置啊 之类的,很容易出现配置文件的错误,尤其是环境不同(比如 测试、开发、生产),文件不统一的情况。

任务

创建配置管理服务器及实现分布式配置管理应用

  • springboot-config-repo:配置文件存放的文件夹
  • springboot-day3-config-server :服务端:管理配置文件
  • springboot-day3-config-client :客户端:使用配置文件

spring cloud分布式配置文件 步骤

1. 创建springboot-config-repo项目

当配置服务器创建好后,将可以用http 请求访问到这些配置文件的内容

http请求地址和资源文件映射如下:

/{application}/{profile}[/{label}]  
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
  • {application} 对应着服务端中 application.* 和 客户端中bootstrap.* 文件中 对应的“spring.application.name”;
  • {profile} 则对应客户端中bootstrap.* 文件中 对应的“spring.active”
  • {label} 则是一个服务器端功能标签“版本”的(即git 的版本,默认master)

在这里,我创建 三个文件

application.properties
config-client-dev.properties
config-server-dev.properties

分别在对应文件 中添加内容为

foo=application
foo=config-client
foo=config-server

将此文件提交到本地的git 中

echo foo=application > application.properties
echo foo=config-client > config-client-dev.properties
echo foo=config-server > config-server-dev.properties
git init
git add .
git commit -m "config init"

为后面演示做示例

Spring cloud使用git或svn存放配置文件,默认情况下使用git.因此你需要安装git私服或者直接使用互联网上的github或者git.oschina,这里推荐使用git.oschina。

2. 创建Spring cloud 配置服务器

该服务器将配置文件转换为 rest接口服务。 即:读取远程配置文件,转换为rest接口服务。

  • 创建一个空的maven web项目,如 config-server

  • 添加一个类

package cloud.config.server;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.context.annotation.Configuration;

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

@EnableConfigServer激活该应用为配置文件服务器.

  • 修改配置文件 application.properties
server.port=8888
spring.profiles.active=dev
spring.cloud.config.server.git.uri=file:///D:/workspace_eclipse_vs_git2/springboot-config-repo/
spring.cloud.config.server.git.searchPaths=springboot-config-repo
spring.cloud.config.label=master
spring.application.name=config-server
#localhost:8888/env
#localhost:8888/config-server/dev
#localhost:8888/config-server/default
  • 其中:
    • server.port是配置当前web应用绑定8888端口,
    • spring.cloud.config.server.git.uri:配置git仓库地址
    • spring.cloud.config.server.git.searchPaths:配置仓库路径
    • spring.cloud.config.label:配置仓库的分支
    • spring.cloud.config.server.git.username:访问git仓库的用户名
    • spring.cloud.config.server.git.password:访问git仓库的用户密码
      如果Git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写

看我的配置文件,我想 聪明的你一定看出来了,uri 我采用的是本地的git,searchPaths 就是刚才创建的配置文件目录了
当然正式发布是建议 采用远程的git
还有项目名称指定为了 config-server,这个是为了与配置文件命名保持一致的,类似于项目的别名

  • 修改pom 文件,加入依赖
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-config-server</artifactId>
</dependency>

这个架包,是配置文件服务器的关键哦。

{"name":"config-server","profiles":["dev"],"label":"master","version":"47fba534b1151b0d5e8e98d24c1599729943afad","propertySources":[{"name":"file:///D:/workspace_eclipse_vs_git2/springboot-config-repo/config-server-dev.properties","source":{"foo":"config-server"}},{"name":"file:///D:/workspace_eclipse_vs_git2/springboot-config-repo/application.properties","source":{"foo":"application"}}]}

至此,服务器便发布成功了

3. 创建一个客户端使用该远程配置
  • 创建一个Maven 项目
  • 创建一个启动类
  • 创建一个Controller,来使用配置文件中的字段
package com.vc;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController
{
	@Value("${foo}")
	String bar;

	@RequestMapping("/hello")
	String hello()
	{
		return "Hello " + bar + "!";
	}

}

  • 在pom.xml 引入依赖
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
  • 配置文件 bootstrap.*
server:
  port: 8881
spring:
  application:
    name: config-client
  cloud:
    config:
      profile: dev
      label: master
      uri: http://localhost:8888

注意这里是bootstrap.yml而不是appliction.yml,因为bootstrap.yml会在应用启动之前读取,而spring.cloud.config.uri会影响应用启动

如果项目没有成功,那么记得重启几次,项目的启动顺序也是有影响的,尤其的配置文件修改了需要生效。

参考
  1. 使用spring cloud实现分布式配置管理

  2. spring_cloud_config

  3. 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)

  4. Spring Cloud实战(一)-Spring Cloud Config Server

源码地址:https://gitee.com/panie/springboot-example/tree/master/springboot-day3-config-server

转载于:https://my.oschina.net/u/617686/blog/1551665

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值