在传统项目中,配置信息一般都在配置文件(application.properties)、操作系统变量、jar命令启动时的环境变量参数,如果需要更改配置就需要重新构建项目再发布。并且如数据库连接信息等安全性也有风险。所以Spring Cloud 提供了Spring Cloud Config来进行集中式配置管理。
Spring Cloud Config分为Server端和Client端:
Spring Cloud Config Server是Spring Cloud为指定应用中所有服务提供集中式配置的一个服务,实现集中管理所有应用的配置,避免重复配置。
Spring Cloud Config Client可以通过配置获取到Server中的配置信息。
Spring Cloud Config支持git存储配置文件,也支持本地存储。
下面建立一个本地存储的例子试试。
一、通过Spring Cloud Config Server 获取到本地配置
1.pom.xml
<dependencies>
<!--web 组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- eureka client 组件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
2.启动类中使用@EnableConfigServer注解启用配置服务
package com.xing.study.cloud.config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
/**
* @author rt
*/
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
3.配置文件application.properties
spring.application.name=config-server
server.port=8889
# 注册到eureka
eureka.instance.instance-id=config-server
eureka.client.service-url.defaultZone=http://172.23.13.15:8881/eureka/
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
##配置文件存Git
#spring.cloud.config.server.git.uri=http://github/xh/config.git
#spring.cloud.config.label=master
#spring.cloud.config.server.git.search-paths=/**
#spring.cloud.config.server.git.username=username
#spring.cloud.config.server.git.password=password
#配置文件存本地
#注意:文件夹要有访问权限
spring.profiles.active=native
spring.cloud.config.server.native.search-locations=D:/temp
可以注册到eureka来实现配置动态刷新。最好是用git的方式来试试。
4.配置文件指向的D:/temp,在这里放配置文件
图片
里面就放了一个配置:token=mi
这里的命名要和后面访问时的匹配。
application指应用名称,我们的配置文件名称应按照application-{profile}.yml命名。
profile指环境信息,比如生产环境【prod】、开发环境【dev】、测试环境【test】
label指git分支,比如master
5.访问测试
访问格式:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
结果:
图片
二、通过Spring Cloud Config Client获取到server的配置
1.pom依赖
<dependencies>
<!--web 组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
2.配置bootstrap.yml:
# 使用config server中的配置
spring:
cloud:
config:
uri: http://localhost:8889 # 如果注册到eureka,可以直接配置Config Server服务名 比如config-server
label: master
profile: active
fail-fast: true
图片
3.输出配置
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author rt
*/
@RestController
public class TokenController {
@Value("${token}")
private String token;
@RequestMapping("/token")
public String token() {
return token;
}
}
4.公司有网控,上不去git,所以我没有使用git来测试。。。了解了就是啦
配置和应用进行隔离,提升了安全性,也避免了重复配置。
END