zoukankan      html  css  js  c++  java
  • spring boot2X集成spring cloud config

    Spring Cloud Config 分为

      Config Server:

        分布式配置中心,是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息

      Config Client:

        通过指定配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息

    Spring boot版本2.1.8.RELEASE

    服务中心使用Consu,启动Consu

    1.配置中心(服务端)

    easy-config

    (1)添加依赖

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--配置中心-->
    <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>

    (2)配置

      在resources下

      A. 添加 bootstrap.properties

      spring.profiles.active=native本地存储配置方式

      也可以使用git方式

    server.port=8091
    spring.application.name=easy-config
    spring.cloud.consul.host=localhost
    spring.cloud.consul.port=8500
    spring.cloud.consul.discovery.service-name=${spring.application.name}
    spring.cloud.consul.discovery.instance-id=${spring.application.name}:${server.port}
    management.endpoints.web.exposure.include=*
    management.endpoint.health.show-details=always
    
    spring.profiles.active=native
    spring.cloud.config.server.native.search-locations=classpath:/config/

      B. 添加config/easy-api-dev.properties

    hello-string=我是来自配置中心的

    (3)修改启动类

    添加注解@EnableConfigServer开启配置服务支持

    package com.tydt.easy.config;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.config.server.EnableConfigServer;
    
    @EnableConfigServer
    @SpringBootApplication
    public class EasyConfigApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(EasyConfigApplication.class, args);
        }
    
    }

    启动easy-config

    浏览器访问 http://localhost:8091/easy-api/dev

    返回结果

    {
        "name": "easy-api",
        "profiles": [
            "dev"
        ],
        "label": null,
        "version": null,
        "state": null,
        "propertySources": [
            {
                "name": "classpath:/config/easy-api-dev.properties",
                "source": {
                    "hello-string": "我是来自配置中心的"
                }
            }
        ]
    }

    说明:

      配置中心的配置文件会被转化成相应的web接口

      /{application}/{profile}[/{label}]

      /{application}/{profile}.yml

      /{label}/{application}-{profile}.yml

      /{application}/{profile}.properties

      /{label}/{application}-{profile}.properties

    2.客户端

    easy-api

    (1)添加依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>

    (2)配置

      添加配置bootstrap.properties

      通过注册中心的发现服务,去配置中心查找配置

    server.port=8083
    spring.application.name=easy-api
    spring.profiles.active=dev
    spring.cloud.consul.host=localhost
    spring.cloud.consul.port=8500
    
    spring.cloud.consul.discovery.health-check-path=/actuator/health
    spring.cloud.consul.discovery.service-name=${spring.application.name}
    spring.cloud.consul.discovery.heartbeat.enabled=true
    
    management.endpoints.web.exposure.include=*
    management.endpoint.health.show-details=always
    
    spring.cloud.config.discovery.enabled=true
    spring.cloud.config.discovery.service-id=easy-config
    #设为true,如果无法连接config server,启动时会抛异常,并停止服务
    spring.cloud.config.fail-fast=true

    (3)测试方法

    package com.tydt.engine.api.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
        @Value("${hello-string}")
        private String helloString;
        @RequestMapping("/")
        public String Hello(){
            return "hello,easy-api,"+helloString;
        }
    }

    3.测试

    启动easy-api

    测试地址

      http://localhost:8083/

    返回结果

      hello,easy-api,我是来自配置中心的

    4.更新

    修改了配置中心的配置后,如何读取到新的配置呢

    (1)修改测试方法

      添加注解 @RefreshScope

    package com.tydt.easy.api.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.RestController;
    @RefreshScope
    @RestController
    public class HelloController {
        @Value("${hello-string}")
        private String helloString;
        @RequestMapping("/")
        public String Hello(){
            return "hello,easy-api,"+helloString;
        }
    }

    启动easy-config

    启动easy-api

    测试地址

      http://localhost:8083/

    返回结果

      hello,easy-api,我是来自配置中心的

    (2)修改配置

    easy-config的resources/config/easy-api-dev.properties

    hello-string=我是来自配置中心的111

    重启easy-config

    执行http://localhost:8083/actuator/refresh

    输出

    [
        "hello-string"
    ]
    http://localhost:8083/
    输出
      hello,esay-api,我是来自配置中心的111

    说明:

      如果出现Connect Timeout Exception on Url - http://localhost:8888. Will be trying the next url if available

      无论在 Config Server 中配置什么端口,Config Client 启动时,会去访问都默认的 8888 端口

      出现这种情况可以删掉以前的配置文件

      在resources文件夹下,新建 bootstrap.properties 文件( bootstrap.yml) 

      为什么会这样呢?application.properties(application.yml)同bootstrap.properties(bootstrap.yml)的区别是什么呢?查看

    Spring官方文档中文版

  • 相关阅读:
    正在找工作/打算找工作的看过来!
    xx星空面试题
    买的书不少,看的书不多,这是病
    公司那么多 我想去面面
    Android设备直接运行java项目?还杀不死?
    node-sass安装失败 解决办法(linux和window)
    Vue + element控制鼠标右键菜单
    Vue.js中Promise、异步、同步、定时器
    选择器&伪类选择器
    根据城市名称获取对应的省份名称
  • 原文地址:https://www.cnblogs.com/baby123/p/11954919.html
Copyright © 2011-2022 走看看