java 配置中心_Spring Cloud入门2——配置中心Config

Spring Cloud Config

配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。

也就是说,我们可以使用Spring Cloud Config来获取远程服务器上的配置信息。

可以分为两个部分:

服务端: 配置服务端,服务管理配置信息

客户端:客户端调用server端暴露接口获取配置信息

构建服务端

pom文件中增加以下依赖:

org.springframework.cloud

spring-cloud-config-server

在程序application中添加@EnableConfigServer注解,表明这是一个Config Server端

@SpringBootApplication

@EnableConfigServer

public class SpringcloudConfigApplication {

public static void main(String[] args) {

SpringApplication.run(SpringcloudConfigApplication.class, args);

}

}

在application.properties中配置远程仓库信息

spring.application.name=config-server

server.port=7001

# 远程仓库地址,具体到项目

spring.cloud.config.server.git.uri=...

# 项目下的具体路径可以配置多个

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

# 用户名

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

# 密码

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

当然,我们也可以加载本地的配置文件,使用spring.profiles.active=native就会自动搜索resources目录下的文件。

也可以通过设置spring.cloud.config.server.native.searchLocations的方式指定具体位置。

在远程仓库里面存放四个分别代表不同环境的配置文件:

java 配置中心_Spring Cloud入门2——配置中心Config_第1张图片

都存放了一个from属性,分别赋予不同的值。

启动服务端之后,我们可以通过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。

所以我们启动之后,可以通过http://localhost:7001/application/dev访问上面的application.dev文件

877e395b7dd1a9e1cae79a9ef9f4535d.png

现在服务端已经完成了,那我们如何在客户端中获取服务端的配置呢?

新建一个项目,还是首先添加依赖:

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-config

然后再

bootstrap配置文件中增加如下配置:

spring.application.name=application

spring.cloud.config.profile=dev

spring.cloud.config.label=master

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

server.port=7002

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

上面的属性和url中的是一一对应的。

配置完成之后,我们要获取其中的属性,这个很显然使用@Value注解获取的。

@RestController

class TestController {

@Value("${from}")

private String from;

@RequestMapping("/from")

public String from() {

return this.from;

}

}

当我们访问localhost:7002/from的时候,就可以得到配置中的from的值了。

在微服务架构中,就要实现高可用的服务,配置中心也是如此,所以我们需要将配置中心也注册在注册中心中,这样客户端就可以以服务的访问方式来获取配置信息了。

我们需要怎么做呢?

要在注册中心中进行注册,显然需要Eureka的依赖:

org.springframework.cloud

spring-cloud-starter-eureka

并且在application配置文件中向注册中心注册配置中心。

eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

并且需要将配置中心作为一个服务客户端注册进去,所以主类中添加@EnableDiscoveryClient注解。

这样配置中心就注册完成了。

配置中心在服务注册中心中进行注册了,所以我们客户端就不再需要使用url对他进行访问了,而是使用注册中心中的服务来对他进行调用。

要调用在注册中心中的服务,首先自己也得在注册中心中注册一下:

加入依赖:

org.springframework.cloud

spring-cloud-starter-eureka

并且在bootstrap配置文件中添加如下配置:

eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

spring.cloud.config.discovery.enabled=true

spring.cloud.config.discovery.serviceId=config-server

第一行:在注册中心中进行注册

第二行:启动服务发现的功能,开启了才能调用其它服务

第三行:发现的服务的名字

最后,在application主类中添加@EnableDiscoveryClient就完成了。

同样访问localhost:7002/from,可以得到from的值。

配置刷新

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

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

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

org.springframework.boot

spring-boot-starter-actuator

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

最后,actuator给我们提供了一个/refresh接口,修改完git仓库信息之后,向这个接口发送一个POST信息,就会更新配置信息了。

你可能感兴趣的:(java,配置中心)