SpringCloud入门教学|第六篇:分布式配置中心(Spring Cloud Config)

  • 构建Config Server
  • 高可用分布式

Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。使用Config Server,您可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念映射与Spring Environment和PropertySource抽象相同,因此它们与Spring应用程序非常契合,但可以与任何以任何语言运行的应用程序一起使用。随着应用程序通过从开发人员到测试和生产的部署流程,您可以管理这些环境之间的配置,并确定应用程序具有迁移时需要运行的一切。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。很容易添加替代实现,并使用Spring配置将其插入。

构建Config Server

创建一个config-server的module ,并且进行增加spring-cloud-config-server依赖


<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.0modelVersion>

    <groupId>com.examplegroupId>
    <artifactId>config-serverartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <packaging>jarpackaging>

    <name>config-servername>
    <description>Demo project for Spring Bootdescription>
    
    <parent>
        <groupId>com.examplegroupId>
        <artifactId>springcloudartifactId>
        <version>0.0.1-SNAPSHOTversion>
        <relativePath>../pom.xmlrelativePath>
    parent>

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        <java.version>1.8java.version>
        <kotlin.version>1.2.20kotlin.version>
        <spring-cloud.version>Edgware.SR2spring-cloud.version>
    properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-config-serverartifactId>
        dependency>

    dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>${spring-cloud.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

    <build>
        <sourceDirectory>${project.basedir}/src/main/kotlinsourceDirectory>
        <testSourceDirectory>${project.basedir}/src/test/kotlintestSourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
            <plugin>
                <artifactId>kotlin-maven-pluginartifactId>
                <groupId>org.jetbrains.kotlingroupId>
                <version>${kotlin.version}version>
                <configuration>
                    <args>
                        <arg>-Xjsr305=strictarg>
                    args>
                    <compilerPlugins>
                        <plugin>springplugin>
                    compilerPlugins>
                    <jvmTarget>1.8jvmTarget>
                configuration>
                <executions>
                    <execution>
                        <id>compileid>
                        <phase>compilephase>
                        <goals>
                            <goal>compilegoal>
                        goals>
                    execution>
                    <execution>
                        <id>test-compileid>
                        <phase>test-compilephase>
                        <goals>
                            <goal>test-compilegoal>
                        goals>
                    execution>
                executions>
                <dependencies>
                    <dependency>
                        <groupId>org.jetbrains.kotlingroupId>
                        <artifactId>kotlin-maven-allopenartifactId>
                        <version>${kotlin.version}version>
                    dependency>
                dependencies>
            plugin>
        plugins>
    build>


project>
  • 在程序入口的Application类上增加@EnableConfigServer来开启云端配置服务器的功能。
@EnableConfigServer
@SpringBootApplication
class ConfigServerApplication

fun main(args: Array<String>) {
    SpringApplication.run(ConfigServerApplication::class.java, *args)
}
  • 配置文件进行如下配置:
spring.application.name=config-server
server.port=8888

spring.cloud.config.server.git.uri=https://github.com/houshuai0816/Springcloud-Config/ # 地址
spring.cloud.config.server.git.search-paths=respo # 目录搜索
spring.cloud.config.label=master 
spring.cloud.config.server.git.username=  你的账号
spring.cloud.config.server.git.password=  你的密码

参数说明:

  • spring.cloud.config.server.git.uri: 配置git仓库地址
  • spring.cloud.config.server.git.search-paths: 配置仓库路径
  • spring.cloud.config.label:配置仓库的分支
  • spring.cloud.config.server.git.username: 访问git仓库的用户名
  • spring.cloud.config.server.git.password: 访问git仓库的用户密码

如果Git仓库为公开仓库,可以不填写用户账号和密码。

这样我们就可以使用远程仓库的配置文件了。

  • http请求地址和映射文件映射如下:

    • /{application}/{profile}[/{label}]
    • /{application}-{profile}.yml
    • /{label}/{application}-{profile}.yml
    • /{application}-{profile}.properties
    • /{label}/{application}-{profile}.properties
  • 那么我们就去读取远程仓库上面的配置文件,编写一个API接口

@RestController
class ConfigServerController {
    @Value("\${hello}")
    private lateinit var hello:String

    @RequestMapping("/hi")
    fun hi(): String {
        return  hello
    }


}

实例源码:
https://github.com/houshuai0816/SpringCloudDemo


高可用分布式

  • 如果不像在使用配置文件时候都用URL进行指定,则可以采用 Eureka设置一个client 依赖Config Server 进行配置为注册服务器(这里比如服务器名字叫 Config-Server)

  • 那么我们 可以使用的时候直接设置相关的配置文件

spring.application.name=config-client
spring.cloud.config.label=master
spring.cloud.config.profile=dev


eureka.client.serviceUrl.defaultZone=http://localhost:8889/eureka/
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
server.port=8881

你可能感兴趣的:(后端--开发,SpringCloud入门教程)