配置中心的作用就在于可以在项目启动时加载远程或本地的配置文件,将配置文件集中管理
springboot版本:
2.1.6.RELEASE
springcloud版本:
Finchley.RELEASE
一、注册中心
1、依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>2.0.0.RELEASE</version> </dependency>
2、配置文件
server.port=8090 spring.application.name=eureka-server eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.service-url.defaultZone=http://localhost:8090/eureka/
配置说明
- eureka.client.register-with-eureka:表示是否将自己注册到Eureka Server,默认是true。
- eureka.client.fetch-registry:表示是否从Eureka Server获取注册信息,默认为true。
接下来只需要在主启动类上加上@EnableEurekaServer注解就万事大吉了
二、配置中心服务端:
1、依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
2、配置文件
server.port=8050 spring.application.name=config-server # 注册到服务注册中心 eureka.client.service-url.defaultZone=http://localhost:8090/eureka/ # github的仓库地址 spring.cloud.config.server.git.uri=https://github.com/kurean/springconfig.git # github的文件路径 spring.cloud.config.server.git.searchPaths=repo # github的分支,默认是master spring.cloud.config.label=master
最后只要在主启动类上添加@EnableConfigServer和@EnableEurekaClient后就可以了
说明:
1、如果在GitHub上建立的仓库是私有的,那么还要加上spring.cloud.config.server.git.username和spring.cloud.config.server.git.password 这两个配置
2、springcloud config 的URL与配置文件的映射关系如下:
/{application}/{profile}[/{label}] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties
3、如果github上建立的目录下的文件为configtest-dev.properties,那么当启动配置中心服务器端时,可以通过http://localhost:8050/configtest/dev/master访问配置文件,如果访问成功则表示配置中心搭建成功
三、配置中心客户端
1、依赖
<dependency>
<groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</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> </dependency>
2、配置文件
创建bootstrap.properties文件,这时项目启动时会通过这个文件从配置中心服务端中设置的配置文件存放地址加载指定的配置文件,因为这个文件是优先于application.properties文件加载的,因此指定注册中心的配置需要放在前者中,否则会造成启动失败
spring.cloud.config.name=configtest #配置文件名称 spring.cloud.config.profile=dev #读取后缀名称 spring.cloud.config.label=master #分支名称 spring.cloud.config.discovery.enabled=true spring.cloud.config.discovery.serviceId=config-server eureka.client.service-url.defaultZone=http://localhost:8090/eureka/ spring.application.name=config-client server.port=9006
当然,端口号和服务名字可以放在application.properties中
配置说明:
- spring.cloud.config.name和spring.cloud.config.profile的值结合就是GitHub上上传的配置文件名,中间用"-"隔开,至于是.properties还是.yml取决于你在本地项目中使用的配置文件是前者还是后者
- 如果项目中没有使用注册中心,那么spring.cloud.config.discovery.serviceId和spring.cloud.config.discovery.enabled就要换成spring.cloud.config.uri来指定配置中心服务端的地址
- 如果项目中使用了注册中心,但是通过uri的方式访问配置中心,那么为了防止本身服务不注册进注册中心,需要在主启动类上加上@EnableDiscoveryClient或@EnableEurekaClient这一服务发现和注册注解
这时就可以创建一个controller来试试效果了
import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ConfigClientController { @Value("${cs.name}") String name; @Value("${cs.age}") String age; @GetMapping(value = "/hi") public String hi(){ return "我的名字是:"+name+",年龄是:"+age; } }
github上的配置文件
configtest-dev.properties
cs.name=kevin
cs.age=18
测试效果
配置动态刷新之手动版
修改配置中心客户端
添加依赖
<!--监控-->
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
修改bootstrap.properties
spring.cloud.config.name=configtest
spring.cloud.config.profile=dev
spring.cloud.config.label=master
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=config-server
eureka.client.service-url.defaultZone=http://localhost:8090/eureka/
management.endpoints.web.exposure.include=refresh
在controller上添加@RefreshScope注解
这时当修改了GitHub上文件后,需要手动刷新客户端配置,发送post请求“http://localhost:9006/actuator/refresh”,使用postman或curl命令(curl -X POST "http://localhost:9006/actuator/refresh")
此时客户端配置文件已经同步修改,重新测试效果
最后,如果遇见Eureka Client启动后就关闭日志打印“ Unregistering application xxx with eureka with status DOWN”,多半是因为本身项目作为web项目启动时没有导入web依赖所致,只要加入就好了
参考文章:https://blog.csdn.net/qazwsxpcm/article/details/88578076