Spring Cloud Config提供在分布式环境下统一的配置文件管理,可以将公用的配置信息放在配置中心服务,当有服务配置需要更新时,直接在配置仓库中更新配置即可,配置仓库可以用本地文件系统,svn,gitlab,github。Spring Cloud Config也可以分布式部署,防止因为一台config宕机,导致整个服务不可用。
1.创建一个spring-cloud-config服务
创建完成之后,pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>spring-cloud-config</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-cloud-config</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
注意:创建完成之后,
红线标注的两处会有些区别,IDE创建的会去查找最新的版本进行创建。
spring-cloud-config作为配置服务的服务端,同时作为客户端注册到eureka注册中心。
在启动类上加上@EnableDiscoveryClient @EnableConfigServer注解:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class SpringCloudConfigApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudConfigServerApplication.class, args);
}
}
application.properties配置内容如下:
#服务注册名称
spring.application.name=spring-cloud-config
#服务端口,不指定,默认为8080
server.port=8888
#配置git仓库地址
#spring.cloud.config.server.git.uri=https://github.com/perfiffer/SpringcloudConfig/
#本地配置的gitlab地址,如果本地没有安装,可以用上面的github的地址作为配置文件仓库地址,注意,敏感的配置信息不要放在github上,除非建立私有的。
spring.cloud.config.server.git.uri=http://192.168.10.101/gitlab/perfiffer/SpringCloudConfigServer.git
#配置仓库路径
spring.cloud.config.server.git.search-paths=respo
#配置仓库分支
spring.cloud.config.label=master
#访问git仓库的用户名
spring.cloud.config.server.git.username=****
#访问git仓库的用户密码
spring.cloud.config.server.git.password=****
#设置以ip注册服务,不以主机名注册服务
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${server.port}
#服务注册中心
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
启动spring-cloud-config服务,在eureka控制台查看服务是否注册成功。
访问http://localhost:8888/address-dev.properties,查看返回的信息,返回的信息为配置文件的内容。
hystrix.command.default.execution.timeout.enabled: false
management.security.enabled: false
server.port: 8882
spring.rabbitmq.host: localhost
spring.rabbitmq.port: 5672
config的http请求地址和资源文件映射关系如下:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties