第三章Spring cloud configuration server 控制配置

在云环境上中,可能要部署上百套实例,这时候怎么做到所有实例都是一样的额呢?而且上百个实例的配置文件的运维是很麻烦的(一旦配置文件代码进行了修改,就需要重新配置上百个实例的配置文件)。

 

基于云的微服务开发强调:

  1. 将应用程序的配置完全从正在部署的实际代码分离
  2. 创建服务器和应用程序以及一个不可变的镜像,它在你的环境升级的时候不会改变。
  3. 将任何应用程序的配置信息在服务器启动的时候通过环境变量注入或者在启动的时候应用程序的微服务从中央仓库读取。

3.1 简单搭建分布式配置中心

  1. 需要两个角色,一个Config server 一个是Config client
  2. Config server获取配置的方式可以是git或者数据库

 

3.1.1 基于git 的Config server

3.1.1.1 构建一个基于model,依赖选择 config server

Spring cloud configuration server 控制配置

 

最终pom如下:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.1.2.RELEASE</version>

        <relativePath/> <!-- lookup parent from repository -->

    </parent>

    <groupId>com.learn</groupId>

    <artifactId>config-server</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <name>config-server</name>

    <description>Demo project for Spring Boot</description>

 

    <properties>

        <java.version>1.8</java.version>

        <spring-cloud.version>Greenwich.RC2</spring-cloud.version>

    </properties>

 

    <dependencies>

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-config-server</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>

 

    <build>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>

    </build>

 

    <repositories>

        <repository>

            <id>spring-milestones</id>

            <name>Spring Milestones</name>

            <url>https://repo.spring.io/milestone</url>

        </repository>

    </repositories>

 

</project>

 

 

3.1.1.2 启动应用中添加@EnableConfigServer

 

@SpringBootApplication

@EnableConfigServer

public class ConfigServerApplication {

 

    public static void main(String[] args) {

     SpringApplication.run(ConfigServerApplication.class, args);

    }

}

 

 

 

 

 

3.1.1.3 修改application.peroperties文件

 

spring.application.name=config-server

server.port=8889

spring.cloud.config.server.git.uri=https://github.com/liucc0413/MyProject

spring.cloud.config.server.git.searchPaths=config

spring.cloud.config.label=master

spring.cloud.config.server.git.username=your username

spring.cloud.config.server.git.password=your password

 

  1. 因为本示例的配置服务是 基于git 拉取配置的所以需要配置git 项目地址,目录,分支,用户名和密码。
  2. https://github.com/liucc0413/MyProject是我构建的一个公共的git 库,所以不需要用户名和密码。
  3. 当前目录下一个service-hi-dev.properties属性文件(文件名要记住啊,后面会用到),内容如下

 

 

foo = lccTest *******************8899999&&&&&&&&&&&&&&&&&&&&&fdsfas

Spring cloud configuration server 控制配置

 

 

 

3.1.1.4 启动服务

启动服务后,可以执行http://localhost:8889/service-hi/dev,来确认是否成功

Spring cloud configuration server 控制配置

 

 

3.1.2 搭建 config client

3.1.2.1 创一个modle,依赖引入web,config client

 

最终pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.1.2.RELEASE</version>

        <relativePath/> <!-- lookup parent from repository -->

    </parent>

    <groupId>com.learn</groupId>

    <artifactId>config-client</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <name>config-client</name>

    <description>Demo project for Spring Boot</description>

 

    <properties>

        <java.version>1.8</java.version>

        <spring-cloud.version>Greenwich.RC2</spring-cloud.version>

    </properties>

 

    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

 

        <!--spring cloud config client-->

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-config</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>

 

    <build>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>

    </build>

 

    <repositories>

        <repository>

            <id>spring-milestones</id>

            <name>Spring Milestones</name>

            <url>https://repo.spring.io/milestone</url>

        </repository>

    </repositories>

 

</project>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.1.2.2 创建bootstrap.properties属性文件

 

注意:

如果有关于config 的相关信息,一定要写到这里,因为config 启动的时候默认加载bootstrap.properties(.yml)文件。

我刚搭建的时候,将config service的端口号等写入到application.yml里了,启动的时候一直去localhost://8888拉配置。因为默认的是config service是localhost://8888

 

 

spring.application.name=service-hi

spring.cloud.config.label=master

spring.cloud.config.profile=dev

spring.cloud.config.uri= http://localhost:8889/

server.port=8881

 

  1. 注释1

spring.application.name:服务的名称

spring.cloud.config.label:标记版本的标志

spring.cloud.config.{profile}映射到客户端上的“spring.profiles.active“

  1. 注释2

Config client向Config server拉取配置,Config server 向git 库拉取配置文件,问题是应该拉取那个配置文件呢?这时候就用到name,profile,label了。

会到git 库找{spring.application.name}-{spring.cloud.config.profile}.properties

 

3.1.2.3 编写测试Rest

@RestController

@RequestMapping("/client")

public class ConfigClientController {

    @Value("${foo}")

String foo;

@RequestMapping(value = "/hi")

public String hi(){

return foo;

}

}

 

结果:

Spring cloud configuration server 控制配置

 

 

 

3.1.3 构建基于数据库配置信息的config server

 

构建基于数据库的config server只需要在3.1.2上做一定的修改,config client的配置不需要修改

 

3.1.3.1 创建lccTest2数据库和properties

 

  1. 创建表

 

CREATE TABLE `properties` (`id` int(11) NOT NULL,`key` varchar(50) NOT NULL, `value` varchar(500) NOT NULL, `application` varchar(50) NOT NULL,`profile` varchar(50) NOT NULL,`label` varchar(50) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

  1. 表中插入数据

Spring cloud configuration server 控制配置

 

3.1.3.2 添加数据库依赖

<dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-data-jpa</artifactId>

        </dependency>

 

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>8.0.13</version>

            <scope>compile</scope>

        </dependency>

 

3.1.3.3 application.properties如下

spring.application.name=config-server

server.port=8889

 

spring.profiles.active=jdbc //一定要改为jdbc

spring.cloud.config.server.jdbc.sql=SELECT `KEY`,`VALUE` from properties where APPLICATION=? and PROFILE=? and LABEL=?

 

spring.datasource.url=jdbc:mysql://localhost:3306/lccTest2

spring.datasource.username=root

spring.datasource.password=123456

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

 

注释:spring.cloud.config.server.jdbc.sql默认是SELECT `KEY`,`VALUE` from PROPERTIES where APPLICATION=? and PROFILE=? and LABEL=?(即表大写),我的数据库版本执行的时候报错,所以改为小写。

 

启动测试结果

Spring cloud configuration server 控制配置

 

源码:https://github.com/liucc0413/SpringCloudConfig

相关文章:

  • 2021-06-18
  • 2021-08-21
  • 2022-12-23
  • 2021-12-07
  • 2021-11-06
  • 2021-10-31
  • 2021-07-17
  • 2021-07-03
猜你喜欢
  • 2021-07-19
  • 2021-11-11
  • 2022-01-13
  • 2021-07-29
  • 2021-07-04
  • 2022-02-02
相关资源
相似解决方案