SpringCloud Config
概述
分布式系统面临的——配置文件的问题
微服务意味着要将单体应用服务中的业务拆封成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务,由于每个服务都需要必要的配置信息才能运行,所以一套集中式的,动态的配置文件管理设施是必不可少的。
SpringCloud提供了COnfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml。那上百个配置文件要修改起来,岂不是要发疯!
什么是SpringCloud config分布式配置中心
SpringCloud config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同的微服务应用的所有环节提供了一个中心化的外部配置。
SpringCloud config分为客户端和服务端
服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并且为客户端提供获取配置信息,加密,解密信息等访问接口。
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置中心,配置服务器默认采用git来存储配置信息,这样就助于对环境进行版本管理,并且可以通过git客户端来方便的管理和访问配置中心。
服务端连接git配置
1)导入依赖
<dependencies>
<!--config-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<!---->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
</dependencies>
2)编写配置
server:
port: 3344
spring:
application:
name: springcloud-config-server
#连接远程仓库
cloud:
config:
server:
git:
uri: https://gitee.com/a8801/springcloud-config.git
3)启动
@SpringBootApplication
@EnableConfigServer
public class Config_Server_3344 {
public static void main(String[] args) {
SpringApplication.run(Config_Server_3344.class,args);
}
}
通过config-server,我们可以远程访问到git,访问其中的资源以及配置
客户端连接服务端连接远程
1)导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2)编写配置
bootstrap.yml:系统级别的配置
application.yml:用户级别的配置
# 系统级别的配置
spring:
cloud:
config:
name: config-client #需要从git上获取的资源名称,不用后缀
profile: dev
label: master
uri: http://locahost:3344
# 用户级别的配置
spring:
application:
name: springcloud-config-client-3355
3)我们要保证拿到这个服务,需要编写controller层
package com.mjh.springcloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConfigController {
@Value("${spring.application.name}")
private String applicationName;
@Value("${eureka.client.server-uri.defaultZone}")
private String eurekaServer;
@Value("${server.port}")
private String port;
@RequestMapping("/config")
public String getConfig(){
return "applicationName:"+applicationName+
"eurekaServer:"+eurekaServer+
"port:"+port;
} //如果为空说明从远程拿不到值
}
4)启动
@SpringBootApplication
public class ConfigClient_3355 {
public static void main(String[] args) {
SpringApplication.run(ConfigClient_3355.class,args);
}
}