由于网上资料大多数基于SpringBoot2.0以下版本搭建配置中心,而2.0版本以上的资料较小,因此基于SpringCloud2.0.2.RELEASE搭建了一个手动刷新的配置中心,在(二)全过程详解(自动刷新)WebHooks中将会讲解,该如何实现自动刷新配置。
话不多说,接下来就是如何实现。
一.新建Config-Respoity项目
我是在码云上建立的配置库,在github上也可以,任君选择,毕竟现在github也可以免费建立私有仓库了。
demo版本只需要建立一个仓库包含几个配置文件即可,也可以建立多个子目录进行存放。
config-client-dev.yml文件内容: profile: dev
config-client文件内容 :profile: default
二.新建Config-Server项目
1.所需依赖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.xxx</groupId>
<artifactId>configserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>config-server</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.其次需要在ConfigServerApplication类中添加注解
@EnableConfigServer //表示为ConfigServer端
@EnableDiscoveryClient //表示为Eureka客户端,Eurek服务端的搭建就不在详细描述了,不会的可以google下如何搭建
3.application.yml文件的配置:
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/xxxx/spring-config-resp #spring-config-resp仓库
username: xxxx
password: xxxx
server:
port: 1234
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka/
4.运行
首先需要打开eureka server服务端,否则会报错,若没有的话可以自行删除@EnableDiscoveryClient及yml文件中的eureka配置。
在浏览器中或者postman工具中打开请求地址,请求地址格式可以为以下几种:
http://localhost:1234/config-client.yml
http://localhost:1234/config-client-dev.yml
http://localhost:1234/config-client/dev
可以成功的看到config-server成功请求到配置文件。
三.搭建Config-Client项目
1.所需依赖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.xxx</groupId>
<artifactId>config-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>config-client</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
<!--bootstrap.yml文件生效依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
<version>2.0.2.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-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.bootstrap.yml配置文件:config需要配置bootstrap.yml文件,否则无法正常加载
spring:
application:
name: config-client
cloud:
config:
profile: dev
label: master
uri: http://localhost:1234/ #config-server的地址
discovery:
enabled: true
service-id: config-server
server:
port: 1235
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka/
management:
endpoints:
web:
exposure:
include: "*" #访问监控设置的端口
这里有几点需要特别注意:
1.springcloud2.0以上actuator已经不是全部对外开放了,需要配置,配置*表示所有的都可以通过
2.springcloud2.0以上的手动刷新地址变了 后缀为/actuator/refresh
3.ConfigClientApplication类中添加注解:@EnableDiscoveryClient
4.Controller层: TestController
@RestController
@RefreshScope //刷新
public class TestController {
@Value("${profile}")
private String from;//profile需要在config仓库的配置文件中有这个字段,不然会报错
@RequestMapping("/profile")
public String from(){
return this.from;
}
}
5.启动项目。
(1)访问:http://localhost:1235/profile 查看配置
(2)进行手动刷新
首先在码云上修改配置文件,config-client-dev.yml文件profile: 666
使用postmanf发起post请求,注意是post方式
请求地址:http://localhost:1235/actuator/refresh
再次打开http://localhost:1235/profile ,可以看到配置已经刷新了。
6.总结
在项目中仅仅是手动刷新是无法达到要求的,需要我们配置自动刷新,在接下来的(二)全过程详解(自动刷新)WebHooks 将会介绍如何最简单的搭建一个基于webhooks的自动刷新的配置中心。