Spring Cloud之 Spring Cloud Config(一)

来源:互联网 发布:图片动态特效制作软件 编辑:程序博客网 时间:2024/05/17 08:18

 一、介绍

Spring Cloud Config在分布式系统中提供服务端和客户端去支持额外的外部配置。配置服务中心(Config Server)为所有应用提供各种环境的外部配置。默认采用Git的方式存储配置文件,因此我们很容易部署修改,有助于对环境配置进行版本管理。

二、构建config server

创建一个spring boot 项目,在pom.xml添加spring-cloud-config-server 依赖

<dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-config-server</artifactId></dependency>
在程序的入口SpringCloudConfigServerApplication类加上@EnableConfigServer注解开启配置服务器。

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

创建一个application.yml 文件,内容如下

server:  port: 8888spring:  cloud:    config:      server:        git:          uri: https://github.com/luosai001/SpringCloudConfigRepo          username: amdin          password: 123456

uri是git仓库,用来存储配置信息的

username 是git仓库用户名

password 是git仓库密码

启动应用 访问localhost:8888

创建一个远程仓库,本示例在github上创建了一个仓库仓库地址为 https://github.com/luosai001/SpringCloudConfigRepo

在本地上传了一个文件到仓库,文件名为spring-cloud-config-client-dev.yml 

文件配置信息如下:

server:  port: 8003 #应用端口号  spring:    cloud:        config:            allowOverride: true            failFast: true            overrideNone: true #覆盖非系统属性 true不覆盖            overrideSystemProperties: false #覆盖系统属性 false不覆盖 foo: i am foo,but i changed! changed!changed!

访问localhost:8888/spring-cloud-config-client/dev 

返回信息

{
    "name":"spring-cloud-config-client",
    "profiles":[
        "dev"
    ]
,
    "label":null,
    "version":"cadbabdf73cc54dc8b56afe84d47554efe585cb9",
    "state":null,
    "propertySources":[
        {
            "name":"https://github.com/luosai001/SpringCloudConfigRepo/spring-cloud-config-client-dev.yml",
            "source":{
                "server.port":8003,
                "spring.cloud.config.allowOverride":true,
                "spring.cloud.config.failFast":true,
                "spring.cloud.config.overrideNone":true,
                "spring.cloud.config.overrideSystemProperties":false,
                "foo":"i am foo,but i changed! changed!changed!"
            }

        }

    ]

}


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

  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties
三、创建Config Client 

创建一个spring boot 项目 添加依赖spring-cloud-starter-config,spring-boot-starter-web,spring-boot-starter-actuator(刷新配置)

<dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-config</artifactId></dependency><dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-web</artifactId></dependency>

程序入口类:

   

@SpringBootApplication@RestController@RefreshScopepublic class SpringCloudConfigClientApplication {   @Value("${foo}")   String foo ;   public static void main(String[] args) {      SpringApplication.run(SpringCloudConfigClientApplication.class, args);   }   @RequestMapping("hi")   public String hi(){      return foo ;   }}

在这个主入口中,我们将foo通过${foo}注入给foo变量,并返回。 @RefreshScope 指可以刷新配置。如果配置中foo 的值改变了,在本地刷新 /refresh ,再次访问/hi 就会发现返回的值变了。


创建一个bootstrap.yml文件

spring:  application:    name: spring-cloud-config-client  profiles:    active: dev  cloud:    config:      uri: http://localhost:8888      profile: devmanagement:  security:    enabled: falseserver:  port: 9000

应用名为spring-cloud-config-client 

激活的文件:dev

uri:配置中心地址

management.security.enabled:false 调用/refresh刷新的时候需要。否则会没有权限访问

启动应用 访问:localhost:9000/hi 返回配置里定义的信息。

在远程外部配置文件中我们开启了不覆盖本地系统属性,不覆盖本地非系统提供属性,所以启动时,远程外部配置中端口并没有作为应用的端口。默认都是覆盖,即远程port 8003 会覆盖本地9000端口。


修改外部配置foo的值,需要手动调用localhost:9000/refresh才能刷新foo的值。如果一个值被多个进程使用,那么这几个服务都要手动调用/refresh方法,很麻烦。下一节我们将通过Spring Cloud Bus 来解决这个问题,只需要调用一次即可。









原创粉丝点击