• SrpingCloud config 分布式配置中心


    分布式配置中心的作用:

    当一个系统中的配置文件发生改变的时候,我们需要重新启动该服务,才能使得新的配置文件生效,spring cloud config可以实现微服务中的所有系统的配置文件的统一管理,而且还可以实现当配置文件发生变化的时候,系统会自动更新获取新的配置。

    将配置文件上传到git/SVN服务器然后通过 config server 与git/SVN服务器连接将配置文件信息拉到本地,其他服务直接从config server配置中心获取配置即可,这样只需要修改远端git/SVN里面的配置即可,如下图所示:

    使用码云环境搭建git服务器端:https://gitee.com/ 

    创建一个配置仓库: config-repo 通过 文件→新建文件(如果有现成的yml配置文件则选择上传即可)

    这里以product.yml为例创建几个不同环境下的yml配置文件

    product.yml里面的内容 :

    #数据库配置
    spring:
      application:
        name: products
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://127.0.0.1:3306/sell?useUnicode=true&characterEncoding=utf8&useSSL=false
        username: root
        password: why123
        druid:
          # 下面为连接池的补充设置,应用到上面所有数据源中
          # 初始化大小,最小,最大
          initial-size: 5
          min-idle: 5
          max-active: 20
          # 配置获取连接等待超时的时间
          max-wait: 60000
          # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          time-between-eviction-runs-millis: 60000
          # 配置一个连接在池中最小生存的时间,单位是毫秒
          min-evictable-idle-time-millis: 300000
          validation-query: SELECT 1 FROM DUAL
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          # 打开PSCache,并且指定每个连接上PSCache的大小
          pool-prepared-statements: true
          #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
          max-pool-prepared-statement-per-connection-size: 20
          filters: stat,wall
          use-global-data-source-stat: true
          # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
          connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
          # 配置监控服务器
          stat-view-servlet:
            login-username: admin
            login-password: 123456
            reset-enable: false
            url-pattern: /druid/*
            # 添加IP白名单
            #allow:
            # 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
            #deny:
          web-stat-filter:
            # 添加过滤规则
            url-pattern: /*
            # 忽略过滤格式
            exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
    env:
      product

    数据源是基于druid的,其他几个配置文件内容就不一一贴出来了,可以复制以上配置多建几个配置文件

    切回到开发工具(idea/eclipse)

    pom.xml里面的配置:

     <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.5.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>wanghy.com.cn</groupId>
        <artifactId>config-server</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>config-server</name>
        <description>project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Finchley.SR2</spring-cloud.version>
        </properties>
    
        <dependencies>
    
            <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-netflix-eureka-client</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bus-amqp</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </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>

    application.yml里面配置:

    spring:
      application:
        name: config
      #配置远程配置中心
      cloud:
        config:
          server:
            git:
              uri: https://gitee.com/xxx/config-repo
              username: 码云账号
              password: 码云密码
              basedir: Users/admin/basedir #本地仓库 从远端git仓库存入的本地地址
      rabbitmq:
        host: 127.0.0.1
        port: 5672
        username: guest
        password: guest
    
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
    server:
      port: 8011
    
    # 允许/bus/refresh接口被外部调用
    management:
      endpoints:
        web:
          exposure:
            include: "*"

    在启动类中配置:

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableConfigServer
    public class XXXConfigApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SellConfigApplication.class, args);
        }
    
    }

    启动eureka服务注册中心后再启动(假设已经启动eureka server ) 可以看到它已经注册到eureka服务注册中心了

    euraka服务注册中心: https://www.cnblogs.com/wanghy898/p/11167301.html

    在idea里面可以看到已经将配置文件从远端git拉取到了本地

     

    新建一个项目名字叫:sell-product,此时配置文件名称改为bootstrap.yml 而不是application.yml

    bootstrap.yml 里面的内容为:

    server:
      port: 8083
    #以下是从统一配置中心获取
    spring:
      application:
        name: product
     # 由于配置了公共配置 所以直接从公共配置中心拉取即可
      cloud:
        config:
          discovery:
            enabled: true
            service-id: SELL-CONFIG #代表引用公共配置服务
          profile: dev #此处生产环境也可以不用填写
    # 配置rabbitmq的地址以及用户密码
      rabbitmq:
        host: 127.0.0.1
        port: 5672
        username: guest
        password: guest
    #mybatis配置 mybatis: mapper-locations: classpath:mybatis/mapper/*.xml config-location: classpath:mybatis/mybatis-config.xml type-aliases-package: wanghy.com.cn.entity #对应实体类的路径 #日志相关 logging: level: org.springframework.cloud.netflix.openfeign: debug wanghy.com.cn.mapper: DEBUG #打印sql信息

     pom.xml里面的配置信息:

      <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.3.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>wanghy.com.cn</groupId>
        <artifactId>sell-product</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>sell-product</name>
        <description>product project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Finchley.SR2</spring-cloud.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--<dependency>-->
                <!--<groupId>org.mybatis.spring.boot</groupId>-->
                <!--<artifactId>mybatis-spring-boot-starter</artifactId>-->
                <!--<version>2.0.1</version>-->
            <!--</dependency>-->
    
            <!--加了mybatis启动器会报错 也就是说与mybatis的启动器不能共存-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.1.0</version>
            </dependency>
    
            <!-- 分页插件 -->
            <!--<dependency>-->
                <!--<groupId>com.github.pagehelper</groupId>-->
                <!--<artifactId>pagehelper-spring-boot-starter</artifactId>-->
                <!--<version>1.2.10</version>-->
            <!--</dependency>-->
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    
            <!-- alibaba的druid数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.14</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.4</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bus-amqp</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </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>
    1.打开mysql新建一个数据库 sell 执行建表语句 随便插入几条数据

    CREATE TABLE `product_info` (
    `product_id` varchar(32) NOT NULL,
    `product_name` varchar(64) NOT NULL COMMENT '商品名称',
    `product_price` decimal(8,2) NOT NULL COMMENT '单价',
    `product_stock` int(11) NOT NULL COMMENT '库存',
    `product_description` varchar(64) DEFAULT NULL COMMENT '描述',
    `product_icon` varchar(512) DEFAULT NULL COMMENT '小图',
    `product_status` tinyint(3) DEFAULT '0' COMMENT '商品状态,0正常1下架',
    `category_type` int(11) NOT NULL COMMENT '类目编号',
    `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
    PRIMARY KEY (`product_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    2.新建controller、service.....进行测试,此处略

    启动类配置:

    @SpringBootApplication
    @EnableDiscoveryClient //和@EnableEurekaClient类似如果注册中心不是eureka则用它 consul或者zookeeper
    //@EnableEurekaClient //用于eureka注册中心
    @MapperScan("wanghy.com.cn.mapper")
    public class SellProductApplication {
        public static void main(String[] args) {
            SpringApplication.run(SellProductApplication.class, args);
        }
    }

    用postman请求: http://127.0.0.1:8083/user/userList  请求成功初步搭建完成

    启动后如果修改了配置只需要通过调用bus/refresh接口即可(浏览器中输入http://192.168.1.65:8011/bus/refresh)

    比如在码云仓库中将product-dev.yml配置文件中修改products改为product 后保存

    spring:
      application:
        name: products #将products改为product

    然后在浏览器中输入http://192.168.1.65:8011/bus/refresh 即可即时的将配置更改 返回idea中查看配置也即时的更新了

    但是每次都需要手动的调用,那么需要通过将此接口配置到git的webhook就可以实现自动刷新配置,配置省略。 

  • 相关阅读:
    【力扣 089】24. 两两交换链表中的节点
    【力扣 086】19. 删除链表的倒数第 N 个结点
    【力扣 085】2. 两数相加
    【力扣 093】92. 反转链表 II
    【力扣 090】25. K 个一组翻转链表
    【力扣 091】61. 旋转链表
    【力扣 088】23. 合并K个升序链表
    【力扣 087】21. 合并两个有序链表
    【力扣 092】82. 删除排序链表中的重复元素 II
    vim命令
  • 原文地址:https://www.cnblogs.com/wanghy898/p/11167465.html
Copyright © 2020-2023  润新知