• (七)Alian 的 Spring Cloud Config 配置中心(客户端)


    一、背景

      通过上一篇文章,我们已经搭建了配置中心了,接下里我们继续改造我们的订单服务了,之前我们的订单服务的数据库配置还是写在配置文件中的,通过本文以后,就可以通过配置中心获取了,包括自定义配置也可以。我们已有的服务地址:

    • 注册中心的地址是: http://10.130.3.222:8761/eureka
    • 配置中心的地址是: http://10.130.3.222:6666
    • 订单服务的地址是: http://10.130.3.88:7001

    二、maven依赖

    pom.xml

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>
        
        <dependency>
             <groupId>org.springframework.cloudgroupId>
             <artifactId>spring-cloud-starter-configartifactId>
         dependency>
        
        <dependency>
            <groupId>cn.alian.domaingroupId>
            <artifactId>domain-orderartifactId>
            <version>1.0.0-SNAPSHOTversion>
        dependency>
    	
        <dependency>
            <groupId>cn.alian.microservicegroupId>
            <artifactId>common-dbartifactId>
            <version>1.0.0-SNAPSHOTversion>
        dependency>
    	
        <dependency>
            <groupId>com.googlecode.log4jdbcgroupId>
            <artifactId>log4jdbcartifactId>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    相对于我们订单服务就是多了下面这个关键依赖

    
    <dependency>
         <groupId>org.springframework.cloudgroupId>
         <artifactId>spring-cloud-starter-configartifactId>
     dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    三、配置文件

      application.properties配置文件中就什么都不配置了,也就是 之前的配置文件application.properties里的内容都可以注释或者删除 ,比如我们之前的配置是下面这样的:

    #服务名
    spring.application.name=order
    #端口
    server.port=7001
    #eureka注册中心地址
    eureka.client.serviceUrl.defaultZone=http://10.130.3.222:8761/eureka
    
    #数据库配置
    spring.datasource.driver-class-name=net.sf.log4jdbc.DriverSpy
    spring.datasource.url=jdbc:log4jdbc:mysql://10.130.3.99:3306/order?autoReconnect=true&useSSL=false
    spring.datasource.username=alian
    spring.datasource.password=Alian1223
    spring.datasource.hikari.connection-timeout=5000
    spring.datasource.hikari.maximum-pool-size=10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

      新增配置文件 bootstrap.properties,内容如下,具体的可以查看我的注释

    #应用名
    spring.application.name=order
    #开发环境
    spring.profiles.active=dev
    #配置标签(根据配置中心,本文全是采用master)
    spring.cloud.config.label=master
    #配置中心地址,多个用逗号分隔
    spring.cloud.config.uri=http://10.130.3.222:6666
    #设置为true时,如果服务无法连接到配置中心服务器,则服务启动失败
    spring.cloud.config.fail-fast=true
    #日志配置,通过配置中心获取
    logging.config=${spring.cloud.config.uri}/logback/${spring.application.name}.xml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

      从配置文件的名称也能指定,bootstrap就有引导的意思,它要比application.properties先加载,像之前那些端口和数据配置就都从数据库里获取了。关于 spring.profiles.active spring.cloud.config.label 的配置,我在上一篇文章里已经讲过了,大家可以了解下:(六)Alian 的 Spring Cloud Config 配置中心(服务端),同时呢我们这里配置了日志的获取方式为配置中心,因为我们配置中心提供了默认的日志格式,我们要开发的应用都可以使用。

    #日志配置,通过配置中心获取
    logging.config=${spring.cloud.config.uri}/logback/${spring.application.name}.xml
    
    • 1
    • 2

    四、验证

      我们写了一个接口通过我们的配置中心去获取我们的服务端口和网关地址。从我们上一篇文章初始化数据也知道,这些都配置在数据库了。
    在这里插入图片描述

    TestAppPropertiesController

    package cn.alian.mall.order.controller;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.validation.annotation.Validated;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @Slf4j
    @Validated
    @RestController
    @RequestMapping({"/test"})
    public class TestAppPropertiesController {
    
        @Value("${app.gateway}")
        private String gateway;
    
        @Value("${server.port}")
        private String port;
    
        @GetMapping("/getPort")
        public String request() {
            log.info("收到请求");
            return "端口:【" + port + "】返回了网关地址:" + gateway;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

      我们启动服务,在 配置中心服务端 日志输出了如下结果(切面):

    sourceName=order-dev, key=server.port, value=7001
    sourceName=order-dev, key=spring.datasource.password, value=Alian1223
    sourceName=order-dev, key=spring.datasource.platform, value=mysql
    sourceName=order-dev, key=spring.datasource.url, value=jdbc:log4jdbc:mysql://10.130.3.99:3306/order?${jdbc.url.params}
    sourceName=order-dev, key=spring.datasource.username, value=alian
    sourceName=application-default, key=api-url-stock, value=http://10.130.3.222:8888/gateway/stock
    sourceName=application-default, key=app.config-uri, value=http://10.130.3.222:6666
    sourceName=application-default, key=app.gateway, value=http://10.130.3.222:8888/gateway
    sourceName=application-default, key=app.graceful-shutdown-wait-seconds, value=0
    sourceName=application-default, key=app.swagger.base.url, value=10.130.3.222:8888/gateway
    sourceName=application-default, key=app.swagger.enabled, value=true
    sourceName=application-default, key=eureka.client.serviceUrl.defaultZone, value=http://10.130.3.222:8761/eureka
    sourceName=application-default, key=eureka.instance.instance-id, value=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
    sourceName=application-default, key=eureka.instance.lease-expiration-duration-in-seconds, value=90
    sourceName=application-default, key=eureka.instance.lease-renewal-interval-in-seconds, value=30
    sourceName=application-default, key=eureka.instance.metadataMap.contextPath, value=${server.servlet.context-path}
    sourceName=application-default, key=eureka.instance.prefer-ip-address, value=true
    sourceName=application-default, key=jdbc.url.params, value=characterEncoding=utf8&useUnicode=true&useSSL=false&zeroDateTimeBehavior=convertToNull&autoReconnect=true&allowMultiQueries=true&failOverReadOnly=false&connectTimeout=6000&maxReconnects=5
    sourceName=application-default, key=management.endpoint.shutdown.enabled, value=true
    sourceName=application-default, key=management.endpoints.web.exposure.include, value=*
    sourceName=application-default, key=spring.cloud.config.override-none, value=true
    sourceName=application-default, key=spring.datasource.driver-class-name, value=net.sf.log4jdbc.DriverSpy
    sourceName=application-default, key=spring.jackson.date-format, value="yyyy-MM-dd HH:mm:ss"
    sourceName=application-default, key=spring.main.allow-bean-definition-overriding, value=true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

      我们通过地址: http://10.130.3.88:7001/test/getPort 访问我们的订单服务得到如下结果:

    端口:【7001】返回了网关地址:http://10.130.3.222:8888/gateway
    
    • 1

      从这个结果我们也知道,配置中心的 客户端 服务端 获取到了公共的配置( 网关地址 )和自己应用的配置( 端口 ),增加了配置的重用性和可拓展性。那么怎么动态刷新呢?这个问题我后面有时间再解答。

  • 相关阅读:
    TeamTalk中msg_server初始化工作,如何维护与其他服务器的心跳连接
    你应该知道的数仓安全:都是同名Schema惹的祸
    基于R语言、MATLAB、Python机器学习方法与案例分析
    Entity Framework Core入门(看不懂,不掌握)
    C语言:指针详解(5)
    MIMO 从入门到精通 -科普篇 1 - 5G Massive MIMO
    python+Vue心理健康网站django
    leetcode 61. 旋转链表
    freertos简单串口
    android debug 签名文件的别名和秘钥是什么???
  • 原文地址:https://blog.csdn.net/Alian_1223/article/details/124057892