第一章:初探Spring Cloud Config配置集中管理_springcloud 集中配置管理-程序员宅基地

技术标签: spring  spring-cloud  SpringCloud  config  

前路艰难,但谨记,你并不孤独。

Spring Cloud如火如荼,抽空研究研究Spring大家族中的新份子。具体的介绍不会粗线在本系列博文中,如需要理论等知识直接百度or谷歌。

Spring Cloud中保护N多已构建好的微服务,可以做到即插即用,其中大致包含几种服务:Config、Eureka、Ribbon、Hystrix、Feign、Bus等,具体介绍及开源地址请见:Spring Cloud中文官网

今天让我们一起研究下Config,让你发现Spring Cloud的美,也许仅仅因为这一个小小的功能就会让你对Spring Cloud爱不释手,有木有呀?

本文中为一个Maven工程cloud-demo,包含多个maven module工程,其中一个配置的集中服务cloud-demo-config,一个使用配置服务的简单Spring Boot工程cloud-demo-helloword,一个存放配置的文件夹cloud-demo-repo。

所有代码地址:https://github.com/S1ow/cloud-demo.git 持续更新


Now show code


第一步,创建主工程,方便管理

主工程是一个简单Maven工程,创建成功后删除所有文件,只留下pom文件,并创建cloud-demo-repo文件夹(此文件夹需要上传到git/svn上,用于配置服务的读取与集中管理),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>cloud</groupId>
  <artifactId>cloud-demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>cloud-demo</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <modules>
    <module>cloud-demo-config</module>
    <module>cloud-demo-helloword</module>
  </modules>
</project>
  1. cloud-demo-repo:配置文件存放处,可以理解为配置的提供方;
  2. cloud-demo-config:配置服务器,所有的配置读取都是由该服务来实现的,它是从git上来读取配置文件的,可以理解为配置文件的中间转换器;
  3. cloud-demo-helloword:一个简单的应用,可以理解为配置的消费方;

第二步,创建配置“服务中心”,cloud-demo-config工程

会发现创建一个Spring Cloud Config配置服务是多么的轻量级,以后的代码会不会变成傻瓜式编程呢?

1、右键cloud-demo工程new –> Mvane Module工程即可,这也是一个Spring Boot应用程序,所有的Spring Cloud的启动方式全部采用Spring boot,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>cloud</groupId>
    <artifactId>cloud-demo-config</artifactId>
    <version>0.0.1</version>
    <packaging>jar</packaging>

    <name>cloud-demo-config</name>
    <description>cloud-demo-config</description>

    <parent>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-parent</artifactId>
        <version>Brixton.RELEASE</version>
        <relativePath />
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <repositories>
        <repository>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <id>public</id>
            <name>Public Repositories</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>public</id>
            <name>Public Repositories</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </pluginRepository>
    </pluginRepositories>

    <dependencies>
        <!-- 配置服务所需的依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <!-- 暴露服务的一些管理功能 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- 测试组件,权重test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <defaultGoal>compile</defaultGoal>
    </build>

</project>
  • 采用阿里的maven私服地址
  • 使用的Spring的Brixton配置

    2、下面需要创建一个启动类,随着启动类的创建,配置服务也即将搭建完毕了,就是这么so easy:

package org.cloud.demo.config;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

/**
 * 配置服务中心
 *  */
@SpringBootApplication
//只需要一个注解即开启了配置服务的管理
@EnableConfigServer
public class ConfigApplication{
    

    public static void main( String[] args ){
        SpringApplication.run(ConfigApplication.class, args);
    }
}
  • @SpringBootApplication:查看源码相当于@Configuration、@EnableAutoConfiguration、@ComponentScan三个注解,可谓是三个臭皮匠顶个诸葛亮;
  • @EnableConfigServer:顾名思义告诉Spring Boot我要开启配置服务,请给我让路好吗?好的!

    3、还记得刚开始我们创建的需要上传到git/svn上的文件夹cloud-demo-repo么?这里存放是配置文件,配置服务cloud-demo-config需要知道文件在哪呀,对吧?所以需要修改cloud-demo-config工程的application.properties告诉配置服务,去哪里找配置文件:

#配置服务的启动端口,此处可不使用远程配置
server.port=8888
#配置服务的名称,总之你喜欢就好
spring.application.name=cloud-demo-config

#配置服务去哪里找配置文件
spring.cloud.config.server.git.uri=https://github.com/S1ow/cloud-demo.git
#去哪个文件夹找配置文件
spring.cloud.config.server.git.searchPaths=cloud-demo-repo

4、这样配置服务就搭建好了,先别着急启动,让我们创建一份远程配置cloudhello-test.properties,这里的配置文件命名是很有讲究的,A-B-C.type的命名方式:

  1. A:消费配置服务名称,映射到客户端的“spring.application.name”;
  2. B:profile,映射到客户端上的“spring.profiles.active”(逗号分隔列表);
  3. C:label,可以理解是一个小版本号,映射到客户端上的“spring.profiles.active”(逗号分隔列表);
  4. type:可以是yml、properties
#这里的配置跟配置服务没有半毛钱关系,用于配置服务的消费应用的
config.server.ip=127.0.0.1
config.server.port=8888

app.profile=test
#测试环境
app.hello=\u6D4B\u8BD5\u73AF\u5883\uFF01

再创建一个cloudhello-dev.properties,方便后面配置消费的调用:

config.server.ip=127.0.0.1
config.server.port=8888

app.profile=dev
#开发环境
app.hello=\u5F00\u53D1\u73AF\u5883

配置服务就搞定了,有木有很简单,可以启动配置服务工程,并可以通过http://ip:port/A/B 来看看读取回来的配置信息啦,其中ip和port为配置服务的,A/B就是上面提到的A/B。

第三步,创建配置的消费,cloud-demo-helloword工程

1、pom.xml,这里不做过多描述,与cloud-demo-config工程配置几乎相同:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <!-- <parent>
    <groupId>cloud</groupId>
    <artifactId>cloud-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent> -->
  <groupId>cloud-demo-helloword</groupId>
  <artifactId>cloud-demo-helloword</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>cloud-demo-helloword</name>
  <url>http://maven.apache.org</url>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.5.RELEASE</version>
        <relativePath />
    </parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-parent</artifactId>
                <version>Brixton.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!-- 暴露服务的一些管理功能 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <id>public</id>
            <name>Public Repositories</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>public</id>
            <name>Public Repositories</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </pluginRepository>
    </pluginRepositories>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2、创建hello工程的启动类:

package org.cloud.demo.helloword;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloApplication {
    

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

3、创建一个Controller用于获取远程配置:

package org.cloud.demo.helloword;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class HelloController {

    //将从远程配置获取app.hello这个key
    @Value("${app.hello}")
    String bar;

    //根据配置的不同输出不同
    @RequestMapping("/")
    String hello(){
        return "This is " + bar;
    }
}

4、hello工程的application.properties:

#配置服务的名称,与cloudhello-test.properties中的cloudhello相同
spring.application.name=cloudhello
#hello工程启动端口
server.port=9999

#告诉springcloud去哪里找配置,这里的config.server.ip与#config.server.port均为远程配置
spring.cloud.config.uri=http://${config.server.ip}:${config.server.port}
#读取那个服务的配置
spring.cloud.config.name=cloudhello
获取哪个profile,如果获取不到默认为test
spring.cloud.config.profile=test

Ok,下面启动hello工程,访问http://127.0.0.1:9999/ 可以得到返回

This is 测试环境

将上述配置文件中的spring.cloud.config.profile修改为dev,重启服务,访问上述地址,可以得到返回:

This is 开发环境

从这个简单的例子中,可以发现切换配置的快速,对于有多个环境需要维护的企业,减低了极大的成本,带来更短的时间,更高的安全性。

快去试试吧。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yf275908654/article/details/72927497

智能推荐

Linux中yum命令详解_yum install fcgi是什么指令-程序员宅基地

文章浏览阅读4.3k次,点赞2次,收藏19次。原文地址:http://www.cnblogs.com/chuncn/archive/2010/10/17/1853915.htmlyum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依_yum install fcgi是什么指令

安装QT5 出现错误 unkown type name ‘QApplication’ unkown type name ‘MainWindow’_qt5报错/home/user/桌面/finalwork_qjy219050725/mainwind-程序员宅基地

文章浏览阅读7.1k次,点赞17次,收藏29次。安装环境:win7windos qt5版本:qt-opensource-windows-x86-5.12.0.exe安装完成能运行,但是编译程序出现错误如下:unkown type name ‘QApplication’unkown type name ‘MainWindow’解决办法:帮助-》关于插件 去掉Clang Code Model那个勾,然后重启电脑参考文章:QT5.10.0安装教程图文教程以及安装成功QT5.10.0后环境配置图文教程..._qt5报错/home/user/桌面/finalwork_qjy219050725/mainwindow.h:44: error: unknow

Windows Phone 7 布局与大小-程序员宅基地

文章浏览阅读50次。1、整体的布局代码 <phone:PhoneApplicationPage x:Class="SilverlightCornersAndEdges.MainPage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presenta..._phonewindow设置大小

Centos 7 简单部署 jar 并访问成功_centos7一般安装文件 都把jar包放哪里-程序员宅基地

文章浏览阅读1.8k次。  在部署项目之前,必须确保 Centos 7 中已经配置好了 jdk、mysql、maven 等配置。基本步骤和 window 系统基本一致。整体步骤可分为:打包 > 上传 > 启动项目 > 对外开放相应端口 > 访问。1、打包  在本地打包相应的 jar 包。mvn package2、上传  将 jar 包上传到服务器的某个位置。我放在 /usr/project/auto_parts 中。3、启动项目  启动项目有很多种方法。java -jar xxx.jar_centos7一般安装文件 都把jar包放哪里

plsql安装教程_安装plsql步骤-程序员宅基地

文章浏览阅读4.9k次,点赞3次,收藏18次。先安装Oracle客户端下载地址:再安装plsqldev下载地址:如果需要汉化,可安装汉化补丁包下载地址:配置数据库找到安装路径,如C:\app\xxx\product\11.2.0\client_1\Network\Admin,将此目录下Sample文件夹里的tnsnames.ora文件移到上层Admin目录下。tnsnames.ora里添加数据库配置AUTOSPD1 = (..._安装plsql步骤

权限设计(下) - 细说权限设计-程序员宅基地

文章浏览阅读51次。什么是权限管理一般来说,只要有用户参与的系统,那么都要有权限管理,尤其是一些后台的管理系统,权限管理可以实现对用户访问系统的控制,按照安全规则或者相关策略的控制,可以使用户访问到只属于自己被授权的相关(比如菜单,或者页面资源)权限管理包括用户认证和授权两模块用户认证用户认证,说白了就是登录的时候进行的验证,验证用户身份合法性。最常见的用户身份验证的方式:1、用户名 + ..._在下一篇文章中,将详细介绍以“权限”为单位的权限设计,欢迎阅

随便推点

jenkins重启 linux_Jenkins 自动部署-程序员宅基地

文章浏览阅读346次。连接服务器 首先要有一台自己的服务器,或者本机装一个虚拟机,系统最好使用Linux,用了Linux才能感觉到是真的比win好用。我就用自己的云服务器来举例。 打开终端使用ssh连接到服务器 ssh [email protected] 输入密码 ******安装组件 首先检查系统中是否安装java,可以用java -version,如果显示出java版本证明java已经安装,否..._liunx jenkins二进制怎么重启

关于用transmac黑苹果制作引导盘无法识别_transmac u盘 无法引导 csdn-程序员宅基地

文章浏览阅读3.5k次。第一种方法https://www.apple114.com/pages/macos/可以从这儿冲39块钱开通会员下载,好心人可以帮我下载一下,嘤嘤嘤第二种方法利用VMware安装虚拟器macos系统制作启动盘,比较麻烦参考教程https://www.cnblogs.com/macz/p/14863851.html插入u盘,将U盘在「磁盘工具」中初始化,并在「终端」输入一下命令,其中「MyVolume」代表自己的U盘名称,重要的事再说一遍 MyVolume 是你U盘的名字,格式化之后U盘的名字_transmac u盘 无法引导 csdn

计算机无法读取exe文件,电脑所有EXE文件都打不开的原因和多种解决方案-程序员宅基地

文章浏览阅读1.3w次,点赞6次,收藏14次。EXE文件是Windows的可执行文件,用于运行程序,正常情况下双击打开就可以运行了。今日,一些小伙伴说电脑所有exe文件打不开怎么回事?据调查一般都是由于病毒木马所致,这时候执行任何Exe文件都会出错,所有下文就给大家详解多种解决方案。软件解决方案:1.下载免费杀毒软件 金山毒霸20112.安装完毕后全盘扫描,这里就不再过多讲解,相信大家都会的。3.使用系统修复功能,恢复系统正常,一般系统里都安..._windows所有exe文件都打不开

自动记帐如何确定会计科目的借贷_sap移动类型怎么确定借贷-程序员宅基地

文章浏览阅读1.1w次。序:本文将向您提供SAP MM自动记帐如何确定会计科目的借贷,以及如何从前台物料移动操作反查到相应的会计凭证。 ----------------------------我是万恶的分割线------------------------------ 突然有个疑问,虽然在OBYC中事先维护好了科目的借贷方,但在实际的自动记帐过程中,系统是如何确定用的是借方科目还是贷方科目呢? 如上图,查看表_sap移动类型怎么确定借贷

京东php分销系统开源,2017Ecshop鸿宇小京东V7.2.3二次开发版分销多用户商城系统微信支...-程序员宅基地

文章浏览阅读438次。演示地址:如有演示站请以演示为准,无演示站以截图为准,源码太多服务器有限,无法搭建所有源码演示站,请谅解!新手购买指导:1.在本站注册账号 丨 2.登录已注册账号充值源码所需金币 丨 3.登录账号下载所需源码即可温馨提示:本站所有虚拟资源仅供学习参考技术交流使用,切勿用于商业用途,非法商用或复制传播!2017Ecshop鸿宇小京东V7.2.3二次开发版分销多用户商城系统支付+短信需要安装的请与客服..._ecshop 小京东版本

遗传算法原理与应用_遗传算法可以解决什么问题-程序员宅基地

文章浏览阅读3.6k次。文章目录什么是遗传算法遗传算法用在什么地方遗传算法原理与步骤遗传算法总结什么是遗传算法在问题最优求解中,我们可能会遇到问题不容易求解的情况,或者不存在凹凸性的情况,或者采用暴力求解不可行如NP问题等。这时候一种思路是采用遗传算法。所谓遗传算法(Genetic Algorithm,GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是通过自然进化过程搜索最优解的方法。遗传..._遗传算法可以解决什么问题

推荐文章

热门文章

相关标签