51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2372|回复: 0
打印 上一主题 下一主题

[原创] Spring Cloud Config 基础示例

[复制链接]
  • TA的每日心情
    无聊
    5 天前
  • 签到天数: 77 天

    连续签到: 1 天

    [LV.6]测试旅长

    跳转到指定楼层
    1#
    发表于 2019-3-8 16:29:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    Spring Cloud Config 简介什么是Srping Cloud Config?
    Spring Cloud Config 是一种分布式配置中心框架, 为分布式系统中的外部化配置提供服务器和客户端支持。(同类技术还有vault,zookeeper,Consul)
    使用Config Server,可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念映射与Spring Environment和PropertySource抽象,因此它们非常适合Spring应用程序,但可以与任何语言运行的任何应用程序一起使用。当应用程序通过部署管道从开发到测试并进入生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。服务器存储后端的默认实现使用git,因此它可以轻松支持配置环境的标记版本,以及可用于管理内容的各种工具。
    Spring Cloud Config也主要由两部分组成:
    Config-Server: 用于配置外部的资源文件,支持对属性值进行加解密
    Config-client:绑定到config server使用远程配置文件初始化spring,支持对属性值进行加解密
    本文示例说明
    • 为了更直观的理解spring cloud config,本文通过server获取整个配置,效果上与通过配置springboot的active 来切换环境一致;通过接口查询数据库以查看效果;
    • 采用高可用架构;此处使用eureka去做服务注册发现(暂时也只会这个。。)
    新建ConfigServer

    为了减少文章长度,尽量干货,创建过程就不截说明了,建议使用Intellij idea进行创建;

    • POM文件:
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3.         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.         <modelVersion>4.0.0</modelVersion>

    5.         <groupId>com.lc.springcloud</groupId>
    6.         <artifactId>config-server</artifactId>
    7.         <version>0.0.1-SNAPSHOT</version>
    8.         <packaging>jar</packaging>

    9.         <name>config-server</name>
    10.         <description>Demo project for Spring Boot</description>

    11.         <parent>
    12.                 <groupId>org.springframework.boot</groupId>
    13.                 <artifactId>spring-boot-starter-parent</artifactId>
    14.                 <version>2.1.0.RELEASE</version>
    15.                 <relativePath/> <!-- lookup parent from repository -->
    16.         </parent>

    17.         <properties>
    18.                 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    19.                 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    20.                 <java.version>1.8</java.version>
    21.                 <spring-cloud.version>Greenwich.M2</spring-cloud.version>
    22.         </properties>

    23.         <dependencies>
    24.                 <dependency>
    25.                         <groupId>org.springframework.cloud</groupId>
    26.                         <artifactId>spring-cloud-config-server</artifactId>
    27.                 </dependency>

    28.                 <dependency>
    29.                         <groupId>org.springframework.cloud</groupId>
    30.                         <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    31.                 </dependency>

    32.                 <dependency>
    33.                         <groupId>org.springframework.boot</groupId>
    34.                         <artifactId>spring-boot-starter-test</artifactId>
    35.                         <scope>test</scope>
    36.                 </dependency>
    37.         </dependencies>

    38.         <dependencyManagement>
    39.                 <dependencies>
    40.                         <dependency>
    41.                                 <groupId>org.springframework.cloud</groupId>
    42.                                 <artifactId>spring-cloud-dependencies</artifactId>
    43.                                 <version>${spring-cloud.version}</version>
    44.                                 <type>pom</type>
    45.                                 <scope>import</scope>
    46.                         </dependency>
    47.                 </dependencies>
    48.         </dependencyManagement>

    49.         <build>
    50.                 <plugins>
    51.                         <plugin>
    52.                                 <groupId>org.springframework.boot</groupId>
    53.                                 <artifactId>spring-boot-maven-plugin</artifactId>
    54.                         </plugin>
    55.                 </plugins>
    56.         </build>

    57.         <repositories>
    58.                 <repository>
    59.                         <id>spring-milestones</id>
    60.                         <name>Spring Milestones</name>
    61.                         <url>https://repo.spring.io/milestone</url>
    62.                         <snapshots>
    63.                                 <enabled>false</enabled>
    64.                         </snapshots>
    65.                 </repository>
    66.         </repositories>
    67. </project>
    复制代码
    • application.yml配置如
    1. server:
    2.         port: 8100
    3. spring:
    4.         application:
    5.                 name: config-server
    6.         cloud:
    7.             config:
    8.                         server:
    9.                         git:
    10.                            uri: https://github.com/lvchaogit/SpringCloud
    11. eureka:
    12.    client:
    13.     service-url:
    14.       defaultZone: http://localhost:8081/eureka/ # 服务注册中心地址
    复制代码

    通过配置不难理解,该配置是从git上获取配置,更多配置后续详解;

    • application.java
    1. @SpringBootApplication
    2. @EnableConfigServer
    3. @EnableDiscoveryClient
    4. public class ConfigServerApplication {

    5.         public static void main(String[] args) {
    6.                 SpringApplication.run(ConfigServerApplication.class, args);
    7.         }
    8. }
    复制代码

    主要是加上** @EnableConfigServer**注解,开启configserver功能

    搭建 Config Client
    • POM文件
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3.         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.         <modelVersion>4.0.0</modelVersion>

    5.         <groupId>com.lc.springcloud</groupId>
    6.         <artifactId>config-client</artifactId>
    7.         <version>0.0.1-SNAPSHOT</version>
    8.         <packaging>jar</packaging>

    9.         <name>config-client</name>
    10.         <description>Demo project for Spring Boot</description>

    11.         <parent>
    12.                 <groupId>org.springframework.boot</groupId>
    13.                 <artifactId>spring-boot-starter-parent</artifactId>
    14.                 <version>2.1.0.RELEASE</version>
    15.                 <relativePath/> <!-- lookup parent from repository -->
    16.         </parent>

    17.         <properties>
    18.                 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    19.                 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    20.                 <java.version>1.8</java.version>
    21.                 <spring-cloud.version>Greenwich.M2</spring-cloud.version>
    22.         </properties>

    23.         <dependencies>
    24.                 <!-- config starter begin-->
    25.                 <dependency>
    26.                         <groupId>org.springframework.cloud</groupId>
    27.                         <artifactId>spring-cloud-starter-config</artifactId>
    28.                 </dependency>
    29.                 <!-- config starter end-->
    30.                 <dependency>
    31.                         <groupId>org.springframework.cloud</groupId>
    32.                         <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    33.                 </dependency>
    34.                 <dependency>
    35.                         <groupId>org.springframework.boot</groupId>
    36.                         <artifactId>spring-boot-starter-web</artifactId>
    37.                 </dependency>
    38.                 <dependency>
    39.                         <groupId>mysql</groupId>
    40.                         <artifactId>mysql-connector-java</artifactId>
    41.                 </dependency>
    42.                 <dependency>
    43.                         <groupId>org.apache.commons</groupId>
    44.                         <artifactId>commons-pool2</artifactId>
    45.                         <version>2.5.0</version>
    46.                 </dependency>
    47.                 <dependency>
    48.                         <groupId>com.alibaba</groupId>
    49.                         <artifactId>druid-spring-boot-starter</artifactId>
    50.                         <version>1.1.10</version>
    51.                 </dependency>
    52.                 <!-- mybatis-plus begin -->
    53.                 <dependency>
    54.                         <groupId>com.baomidou</groupId>
    55.                         <artifactId>mybatis-plus-boot-starter</artifactId>
    56.                         <version>2.1.9</version>
    57.                         <exclusions>
    58.                                 <exclusion>
    59.                                         <artifactId>tomcat-jdbc</artifactId>
    60.                                         <groupId>org.apache.tomcat</groupId>
    61.                                 </exclusion>
    62.                         </exclusions>
    63.                 </dependency>
    64.                 <!--config监控模块  -->
    65.                 <dependency>
    66.                         <groupId>org.springframework.boot</groupId>
    67.                         <artifactId>spring-boot-starter-actuator</artifactId>
    68.                 </dependency>
    69.                 <dependency>
    70.                         <groupId>org.springframework.boot</groupId>
    71.                         <artifactId>spring-boot-starter-test</artifactId>
    72.                         <scope>test</scope>
    73.                 </dependency>
    74.                 <dependency>
    75.                         <groupId>log4j</groupId>
    76.                         <artifactId>log4j</artifactId>
    77.                         <version>1.2.13</version>
    78.                         <scope>runtime</scope>
    79.                 </dependency>
    80.                 <dependency>
    81.                         <groupId>org.projectlombok</groupId>
    82.                         <artifactId>lombok</artifactId>
    83.                 </dependency>
    84.         </dependencies>

    85.         <dependencyManagement>
    86.                 <dependencies>
    87.                         <dependency>
    88.                                 <groupId>org.springframework.cloud</groupId>
    89.                                 <artifactId>spring-cloud-dependencies</artifactId>
    90.                                 <version>${spring-cloud.version}</version>
    91.                                 <type>pom</type>
    92.                                 <scope>import</scope>
    93.                         </dependency>
    94.                 </dependencies>
    95.         </dependencyManagement>

    96.         <build>
    97.                 <plugins>
    98.                         <plugin>
    99.                                 <groupId>org.springframework.boot</groupId>
    100.                                 <artifactId>spring-boot-maven-plugin</artifactId>
    101.                         </plugin>
    102.                 </plugins>
    103.         </build>

    104.         <repositories>
    105.                 <repository>
    106.                         <id>spring-milestones</id>
    107.                         <name>Spring Milestones</name>
    108.                         <url>https://repo.spring.io/milestone</url>
    109.                         <snapshots>
    110.                                 <enabled>false</enabled>
    111.                         </snapshots>
    112.                 </repository>
    113.         </repositories>
    114. </project>
    复制代码
    • bootstrap.yml
    1. spring:
    2.   application:
    3.     name: config-client
    4.   cloud:
    5.     config:
    6.       profile: dev
    7.       label: master
    8.       discovery:
    9.         enabled: true
    10.         service-id: config-server
    11. server:
    12.   port: 2001
    13. eureka:
    14.   client:
    15.       register-with-eureka: false     #因此处只是消费,不提供服务,所以不需要向eureka server注册
    16.       service-url:
    17.         defaultZone: http://localhost:8081/eureka/ # 服务注册中心地址
    复制代码
    • 首先注意配置文件名称为:bootstartp.yml,并不是~~application.yml~~
    • 通过配置discovery,并设置enabled为true,使client通过服务发现去获取server,server-id为注册中心里配置的服务名称
    • label=git的标签;profile=配置文件版本(类似于spring boot中的active)


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-10 13:14 , Processed in 0.064866 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表