SpringCloud之配置中心Config

Spring Cloud Config可以把一些配置信息配置在远程服务器上,集中化管理集群配置。可以使用Spring Cloud Config来获取远程服务器上的配置信息。
可以分为两个部分:

服务端: 配置服务端,服务管理配置信息
客户端:客户端调用server端暴露接口获取配置信息

先来看看我github的目录和要读取的配置:里面定义四个配置文件读取。
SpringCloud之配置中心Config_第1张图片

现在读取第一个配置文件中的值:读取的方式和配置名称可以有关
SpringCloud之配置中心Config_第2张图片

读取项目可以分为两个部分:

服务端: 配置服务端,服务管理配置信息
客户端:客户端调用server端暴露接口获取配置信息

先来看服务器:

<dependency>  
    <groupId>org.springframework.cloudgroupId>  
    <artifactId>spring-cloud-config-serverartifactId>  
  dependency> 
@SpringBootApplication
@EnableConfigServer
public class Applicationn {
    public static void main(String[] args){
        SpringApplication.run(Applicationn.class,args);
    }

}
server.port=8081
#spring.application.name=microservice-foo
spring.application.name=ok

# 远程仓库地址,具体到项目
spring.cloud.config.server.git.uri=https://github.com/meihuiziaaaaaa/firstTest
# 项目下的具体路径可以配置多个  
spring.cloud.config.server.git.searchPaths=config/config

#spring.cloud.config.label=master

# 用户名
#spring.cloud.config.server.git.username=
# 密码
#spring.cloud.config.server.git.password=

服务器代码就此结束:读取方式如下:
启动服务端之后,我们可以通过url的方式对配置文件进行访问,访问关系如下:

url:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
上面的url会映射{application}-{profile}.properties对应的配置文件,{label}对应git上不同的分支,默认为master。

例如:访问microservice-foo-dev.properties文件的方式
这里写图片描述

在例如访问microservice-foo-dev.properties和microservice-foo.properties
这里写图片描述
这里写图片描述

先开启服务端,在启动客户端
现在客户端的读取方式:

    <dependency>  
        <groupId>org.springframework.bootgroupId>  
        <artifactId>spring-boot-starter-webartifactId>  
    dependency>  
    <dependency>  
        <groupId>org.springframework.cloudgroupId>  
        <artifactId>spring-cloud-starter-configartifactId>  
    dependency>  

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

bootstrap.properties

需要配置在bootstrap中才能生效,而不是在application配置文件中,bootstrap配置文件会比application更加早的加载。

spring.application.name=microservice
spring.cloud.config.profile=foo-dev
spring.cloud.config.uri=http://localhost:8081/
#spring.cloud.config.label=master


@PropertySource(value = "classpath:bootstrap.properties")
@RestController

public class Test1 {
    @Value("${profile}")
    private String profile;

    @RequestMapping("/profile")
    public String profile(){
        System.out.println(this.profile+"....");
        return  this.profile;
    }
}

这里写图片描述

配置刷新

在上面的配置中,客户端是如何获得配置中心的配置信息的呢?是在bootstrap配置文件中配置,在程序启动时加载获取的。显然,在加载完成之后,如果配置中心中的信息发生变化的话,客户端的信息是不会跟着变化的,这是实际开发过程中所不允许的。我们应该怎么做呢?

我们需要增加一个监控模块:spring-boot-starter-actuator

在客户端中增加如下依赖:

    <dependency>  
        <groupId>org.springframework.bootgroupId>  
        <artifactId>spring-boot-starter-actuatorartifactId>  
    dependency>  

并且在Controller中增加@RefreshScope注解。

最后,actuator给我们提供了一个/refresh接口,修改完git仓库信息之后,向这个接口发送一个POST信息,就会更新配置信息了。不需要自己写/refresh接口
修改github配置文件后 (bootstrap.properties: management.security.enabled=false)访问http://localhost:8080/refresh,再一次http://localhost:8080/profile取得的是最新的数据

但是服务端和客户端最终是要成为微服务的,所以还得向eureka服务注册

在服务端和客户端都增加

    <dependency>  
        <groupId>org.springframework.cloudgroupId>  
        <artifactId>spring-cloud-starter-eurekaartifactId>  
    dependency>  
启动类上加
@EnableDiscoveryClient

客户端


eureka.client.serviceUrl.defaultZone=http://xxx.xxx.15.188:8888/eureka/,http://xxx.xxx.15.189:8888/eureka/,http://xxx.168.15.190:8888/eureka/

服务端


#服务注册
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=configServier
eureka.client.serviceUrl.defaultZone=http://xxx.xxx.15.188:8888/eureka/,http://xxx.xxx.15.189:8888/eureka/,http://xxx.xxx.15.190:8888/eureka/

注意:

在客户端上面实现了两种方式读取配置一种是url,另一种是通过注册的服务名称读取

   第一种: spring.cloud.config.uri=http://localhost:8081/

   第二种:  spring.cloud.config.discovery.enabled=true
            spring.cloud.config.discovery.service-id=configServier

最终的代码:

服务端:

pom.xml



-------

 <parent>

    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>1.5.6.RELEASEversion>
  parent>








  <dependencies>
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.11version>
      <scope>testscope>
    dependency>

    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-webartifactId>
    dependency>





    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-testartifactId>
      
    dependency>

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



    <dependency>
      <groupId>org.springframework.cloudgroupId>
      <artifactId>spring-cloud-starter-eurekaartifactId>
    dependency>


    <dependency>
      <groupId>org.springframework.cloudgroupId>
      <artifactId>spring-cloud-dependenciesartifactId>
      <version>Dalston.SR1version>
      <type>pomtype>
      <scope>importscope>
    dependency>


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



  dependencies>



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

启动类


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

}

application.properties

server.port=8081
#spring.application.name=microservice-foo
spring.application.name=configServier

# 远程仓库地址,具体到项目
spring.cloud.config.server.git.uri=https://github.com/meihuiziaaaaaa/firstTest
# 项目下的具体路径可以配置多个  
spring.cloud.config.server.git.searchPaths=config/config

#spring.cloud.config.label=master

# 用户名
#spring.cloud.config.server.git.username=
# 密码
#spring.cloud.config.server.git.password=


eureka.client.serviceUrl.defaultZone=http://192.168.15.188:8888/eureka/,http://192.168.15.189:8888/eureka/,http://192.168.15.190:8888/eureka/

客户端:

pom.xml

<parent>

    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>1.5.6.RELEASEversion>
  parent>


  <properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <maven.compiler.source>1.7maven.compiler.source>
    <maven.compiler.target>1.7maven.compiler.target>
  properties>

  <dependencies>
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>4.11version>
      <scope>testscope>
    dependency>





    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-testartifactId>
      
    dependency>

    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-actuatorartifactId>
    dependency>

    <dependency>
      <groupId>org.springframework.cloudgroupId>
      <artifactId>spring-cloud-starter-configartifactId>
    dependency>
    <dependency>
      <groupId>org.springframework.cloudgroupId>
      <artifactId>spring-cloud-starter-eurekaartifactId>
    dependency>


    <dependency>
      <groupId>org.springframework.cloudgroupId>
      <artifactId>spring-cloud-dependenciesartifactId>
      <version>Dalston.SR1version>
      <type>pomtype>
      <scope>importscope>
    dependency>


    
    <dependency>
      <groupId>org.springframework.cloudgroupId>
      <artifactId>spring-cloud-starter-eurekaartifactId>
    dependency>

  dependencies>

  <repositories>
    <repository>
      <id>spring-milestonesid>
      <name>Spring Milestonesname>
      <url>https://repo.spring.io/milestoneurl>
      <snapshots>
        <enabled>falseenabled>
      snapshots>
    repository>
  repositories>


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

启动类:

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

bootstrap.properties

server.port=8080
spring.application.name=microservice
spring.cloud.config.profile=foo-dev
#spring.cloud.config.uri=http://localhost:8081/

#spring.cloud.config.label=master
management.security.enabled=false

#服务注册
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=configServier
eureka.client.serviceUrl.defaultZone=http://xxx.xxx.15.188:8888/eureka/,http://xxx.xxx.15.189:8888/eureka/,http://xxx.xxx.15.190:8888/eureka/


测试


@PropertySource(value = "classpath:bootstrap.properties")
@RestController
@RefreshScope
public class Test1 {
    @Value("${profile}")
    private String profile;

    @RequestMapping("/profile")
    public String profile(){
        System.out.println(this.profile+"....");
        return  this.profile;
    }


}

你可能感兴趣的:(SpringCloud)