consul学习之搭建配置中心统一管理

我们在之前学习了:

最近由于项目的开始,组长要我搞个从本地统一读取配置文件,通过查看文档发现
springboot自带的有一个配置为:

spring.config.location

具体使用过程,大家可以查看相关文档,该配置可以读取磁盘上的配置文件,亲自测试在maven骨架搭建的项目中完全可以,在gradle构建的项目中是无法加载配置的,具体原因不清楚,由于我们的项目是gradle构建的,所以这里还有第二种方案.

通过springcloud config来实现

本篇教程也就是通过springcloud config的方案来实现高可用的配置,这种方案也是推荐使用的,接下来我们来看具体的实现过程:

项目搭建

在我们之前的项目consul-server中,我们创建module为consul-config的配置中心服务,创建过程就不过说了,我们来看所需依赖:

  • pom.xml文件
 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cacmp</groupId>
<artifactId>consul-config</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>consul-config</name>
<description>搭建springcloud Config配置中心</description>

<properties>
    <java.version>1.8</java.version>
    <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
        <version>2.1.4.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </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>

接着来看配置文件,代码如下:

server:
  port: 9000
spring:
application:
name: consul-config
#环境配置
profiles:
  active: native
#注册中心的配置
cloud:
consul:
  host: 127.0.0.1
  port: 8500
  discovery:
    service-name: ${spring.application.name}

#配置中心的配置
config:
  server:
    native:
      search-locations: classpath:/config

配置文件写的很清楚,注意:这里要写成bootstrap.yml或者是bootstrap.properties,目的是为了项目启动时最先加载该配置文件

  • 然后我们在resources目录下创建一个config目录,用来存放本地到的配置文件,这是springcloud官方的教程.如图:
config.png
  • 来看我们的启动类,代码如下:
package com.cacmp.consul.config;

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

/**
 * @author cb
 */
@EnableConfigServer
@SpringBootApplication
public class ConsulConfigApplication {

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

这样我们的配置中心搭建完毕,启动服务可以发现:

reg.png

服务已经注册到了我们的注册中心consul中,我们访问http://127.0.0.1:9000/consul-consumer/dev,会得到配置文件中的内容:

retu.png

注意:配置文件中访问的URL为:

  • {application}/{profile}

官方推出了四种,这里就不一一说了,想了解的可以自己去看看,接着我们来通过客户端获取我们配置文件中的内容,在我们之前的consul-consumer中加入相关依赖,代码如下:

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-client</artifactId>
        <version>2.1.4.RELEASE</version>
    </dependency>

再来看我们的配置文件,代码如下:

server:
  port: 9001
spring:
  application:
    name: consul-consumer
#注册中心
cloud:
  consul:
    host: 127.0.0.1
    port: 8500
    discovery:
      service-name: ${spring.application.name}
      config:
      format: YAML
#配置中心
config:
  name: ${spring.application.name}
  profile: ${spring.profiles.active}
  fail-fast: true
  discovery:
    enabled: true
    service-id: consul-config
profiles:
active: dev

再来写一个接口来获取配置中心的属性的值,代码如下:

package com.consul.controller;

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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author cb
 */
@RestController
@RefreshScope
public class TestConfigController {

@Value("${config.user}")
private String user;
 @RequestMapping("user")
 @ResponseBody
 public String getUsername(){
   System.out.println("姓名为:"+user);
   return user;
 }

启动我们的服务,控制台有如下的日志信息:

consumer.png

接着访问http://127.0.0.1:9001/user,会得到

yemian.png

来看我们的配置文件的内容:

peizhi.png

以后需要的配置都可以在这里配置即可,关于配置中心简单的使用就是这样的....

代码示例

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 由于文章太长,简书放不下,完整文档见Consul文档。 一、安装 Consul Consul 的安装很简单,安装 ...
    FlySheep_ly阅读 10,201评论 1 13
  • 昨天,是我的生日,其实我是不在意的。一大早,五爹来了微信:生日快乐!我才记起。五爹为啥记得我的生日,一是...
    像猫样行走夏平阅读 193评论 0 2
  • 浚县—我的家乡,在介绍它之前先给大家科普一个字—浚。“浚”字在其他地方都是读“jun”,意思是挖深、疏通(水道),...
    小小瞌睡虫阅读 773评论 0 0
  • 最近百无聊赖,脑壳内的东西神游于外、胡思乱想之际突然灵光乍现,盘算了一下一天时间的开销:每天按正常的睡眠是八个小时...
    醉流星阅读 183评论 0 2
  • 遇见你之前 我修茶树,摘素茧 拣尽青菜叶子上的七彩虫 将日子高高举起,又轻轻落下 杯子水满之前 安于现状 安于风暴...
    言禾雨阅读 387评论 3 15