• SpringCloud使用Consul作为分布式配置中心


    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/qq_36027670/article/details/79701775
                </div>
                                                    <!--一个博主专栏付费入口-->
             
             <!--一个博主专栏付费入口结束-->
            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-4a3473df85.css">
                                        <div id="content_views" class="markdown_views">
                    <!-- flowchart 箭头图标 勿删 -->
                    <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
                        <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
                    </svg>
                                            <h2 id="一简介"><strong>一、简介</strong></h2>
    

    1、 Consul提供了用于存储配置和其他元数据的键/值存储。Spring Cloud Consul Config是Config Server和Client的替代方案。在特殊的“引导”阶段,配置被加载到Spring环境中。默认情况下,配置存储在/config文件夹中。根据应用程序的名称和模拟Spring Cloud Config顺序解析属性的活动配置文件,创建多个PropertySource实例。引用自官网:https://springcloud.cc/spring-cloud-consul.html
    2、consul中的k/v操作
    添加key/value,下面命令在终端中输入,在consul中存储一个data的key为redis/config/minconns,value为timeout=3000

    consul kv put redis/config/minconns timeout=3000

    根据key获取value

    consul kv get redis/config/minconns

    删除key

    consul kv delete redis/config/minconns

    ‘redis/config/‘可以看作文件系统的路径,‘minconns‘相当于文件,‘timeout=3000‘可以看作是文件中的配置项。也可以通过web-ui去操作。

    二、创建maven项目consulservice2

    注意:不同版本的Spring boot和Spring cloud之间会存在差异,每个项目之间的pom.xml中的依赖也有所不同

    1、引入依赖

    <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>2.0.0.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Finchley.M8</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.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-actuator</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
    
            <!--config server-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-server</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-consul</artifactId>
            </dependency>
    
            <!--服务发现依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            </dependency>
    
            <!--用于consul配置-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-consul-config</artifactId>
            </dependency>
        </dependencies>

    2、创建bootstrap.properties和application.properties两个配置文件

    bootstrap.properties:在程序引导期间加载,应用于更加早期配置信息读取,可以配置application.properties相关属性,相当于系统级别的配置,优先加载。

    #bootstrap.properties
    spring.application.name=consul-service2
    server.port=8080

    application.properties:应用程序的配置,可以配置程序中各个模块需要的变量。

    #application.properties
    jdbc.username=root
    jdbc.password=123456

    3、创建应用程序启动类

    @SpringBootApplication
    @EnableDiscoveryClient
    @RestController
    public class ConsulService2App implements CommandLineRunner {
        @Value("${jdbc.username}")
        private String username;
    
    
        @Value("${jdbc.password}")
        private String password;
    
        public static void main(String[] args){
            SpringApplication.run(ConsulService2App.class, args);
        }
    
        @Override
        public void run(String... args) throws Exception {
            System.out.println("username:" + username);
            System.out.println("password:" + password);
        }
    }

    4、运行程序

    这里写图片描述
    可以看到正确的读取了我们本地的配置,但是在一般情况下,Spring cloud都会远程加载配置文件,默认情况下,Spring Cloud都会自动使用远程配置覆盖本地配置。配置加载策略是,首先从远程加载,远程存在则覆盖本地,远程不存在,在从本地配置查找,如果本地也不存在,则抛出异常。

    5、在bootstrap.properties中添加consul作为配置中心的的配置

    5.1 、添加配置

    spring.application.name=consul-service2
    server.port=8080
    
    # 指定consul配置的文件夹前缀为config
    spring.cloud.consul.config.prefix=config
    # 指定consul配置的配置文件为configuration
    spring.cloud.consul.config.data-key=configuration
    # 指定consul配置的配置文件格式properties(maven),gradle为(YAML)
    spring.cloud.consul.config.format=properties
    #指定consul配置的配置文件父路径
    spring.cloud.consul.config.defaultContext=${spring.application.name}

    5.2 、在consul server中存储我们的配置项
    通过命令行添加配置: jdbc.username=yyh
    这里写图片描述
    通过consul的web-ui查看我们的配置,也可以通过consul的web-ui添加配置:
    这里写图片描述

    5.3 、再次此运行程序
    我们会发现,username已经被远程配置替换
    这里写图片描述
    5.4 、使用本地配置覆盖远程配置
    下面一段引用官网原文,地址是:https://springcloud.cc/spring-cloud-dalston.html#overriding-bootstrap-properties
    通过引导上下文添加到应用程序的属性源通常是“远程”(例如从配置服务器),并且默认情况下,不能在本地覆盖,除了在命令行上。如果要允许您的应用程序使用自己的系统属性或配置文件覆盖远程属性,则远程属性源必须通过设置spring.cloud.config.allowOverride=true(在本地设置本身不起作用)授予权限。一旦设置了该标志,就会有一些更精细的设置来控制远程属性与系统属性和应用程序本地配置的位置:spring.cloud.config.overrideNone=true覆盖任何本地属性源.
    注意:一般情况下在较新的版本中spring.cloud.config.allowOverride默认是true,spring.cloud.config.overrideNone为false
    接下来添加远程配置:spring.cloud.config.overrideNone=true,在运行程序,会发现,本地属性覆盖了远程属性。此时,假如本地没有jdbc.username=root,Spring cloud就会使用远程的配置jdbc.username=yyh
    这里写图片描述

    **6、后续

    关于Spring cloud config和Spring cloud consul的配置还有很多,中文官网:https://springcloud.cc/spring-cloud-dalston.html#overriding-bootstrap-properties
    源码:https://github.com/NapWells/spring_cloud_learn/tree/master/discover_server_with_consul/springcloudlearn/consulservice2

    原文地址:https://blog.csdn.net/qq_36027670/article/details/79701775
  • 相关阅读:
    【Docker】解析器指令之 escape
    【Docker】解析器指令之 syntax
    【Docker】Dockerfile 解析器指令
    【Docker】Dockerfile 格式
    【Docker】Dockerfile 介绍
    【Docker】Spring Boot 和 Docker
    【Docker】理解 Docker 中的 OverlayFS
    【Docker】使用 OverlayFS 存储驱动
    【Docker】选择存储驱动
    kuangbin专题 专题一 简单搜索 Fire! UVA
  • 原文地址:https://www.cnblogs.com/jpfss/p/11903664.html
Copyright © 2020-2023  润新知