每天坚持三件事:看脸,看秤,看余额!如果脸不够帅气,体重不够低,余额不够多,那么,请继续奋斗!——摘自知乎
Spring Cloud Config
Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。Spring cloud使用git或svn存放配置文件,默认情况下使用git
第一种,本地配置
缺点:
将配置文件配置在本地的时候,如果配置文件发生改变,就需要重启配置中心,会造成配置中心的服务终断,可能会造成较大的损失,解决方案是可以将配置中心集群,需要改变配置文件的时候,一个一个的修改,修改完一个注册上去,没修改的先不注册,但是这样还是很麻烦,所以推荐第二种用git配置的方式。
配置中心的服务端配置:
1、添加依赖
<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>
2、在启动类上添加注解
@EnableConfigServer
3、配置文件
server.port=8100
spring.application.name=ConfigService
#使用本地存储
spring.profiles.active=native
#配置文件的存放的位置
spring.cloud.config.server.native.search-locations=classpath:properties
#注册到eureka上
eureka.client.service-url.defaultZone=http://localhost:9000/eureka
4、properties文件夹下的配置文件
根据在application.yml文件中配置的位置和名称,在resource底下新建一个properties文件夹,在其中可以添加各种环境下的配置文件,比如开发环境,测试环境,生产环境。如下:
文件的
neo-config-dev
,中的neo-config
是文件名,dev
是环境
在不同的文件中配置不同环境下的配置,比如在neo-config-dev文件下配置数据库的相关信息:
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/jpa?useSSL=true&serverTimezone=UTC&characterEecoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
服务端配置完成,在浏览器中输入http://localhost:8100/neo-config/dev
查看配置中心是否配置好
配置中心的客户端
配置中心的客户端其实就是需要引入在配置中心服务端的配置的服务模块,比如需要在dao中需要引入数据库的配置信息,那么,配置过程如下。
1、相关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
2、配置bootstrap.properties文件
bootstrap.properties文件优先于application.yml文件加载,在服务模块启动的时候最先加载
下面的是application.yml文件,将其中的数据库的配置信息转移到了配置中心的服务端了,所以注释掉了。而其中的注册到eureka的信息转移到了bootstrap.properties文件中,目的是让该模块在启动的时候先注册到注册中心,先加载数据库的配置信息。
server:
port: 8082
spring:
application:
name: DaoService
# datasource:
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://localhost:3306/jpa?useSSL=true&serverTimezone=UTC&characterEecoding=UTF-8
# username: root
# password: 123456
#
#eureka:
# client:
# service-url:
# defaultZone: http://localhost:9000/eureka
mybatis:
mapper-locations: /mapper/*Dao.xml
下面的就是bootstrap.properties文件的配置信息
# 配置中心的服务端配置文件的名,前有说明
spring.cloud.config.name=neo-config
# 配置文件的应用环境,前有说明
spring.cloud.config.profile=dev
# 配置中心在注册中心上的名称,从该服务上抓取配置信息
spring.cloud.config.discovery.service-id=ConfigService
spring.cloud.config.discovery.enabled=true
# 如果不将配置中心注册到注册中心eureka上的时候,可以采用如下的方法直接调取,8100为配置中心的端口号
#spring.cloud.config.uri=http://localhost:8100
eureka.client.service-url.defaultZone=http://localhost:9000/eureka
使用git配置
缺点:
配置到git上之后,每次配置文件发生改变,服务模块不能及时的获取到信息,需要人工的来刷新。具体刷新在配置步骤之后,但是该方法完全依赖于网络,如果网络不可用,存于git中的配置都将不可用。具体配置如下:
在码云或者github上建好仓库,将之前的三个不同开发环境的配置文件传到该仓库中,如下:
其他和本地配置不同的只有配置中心服务端的配置文件中,修改为如下
server.port=8100
spring.application.name=ConfigService
#使用本地存储
#spring.profiles.active=native
#配置文件的存放的位置
#spring.cloud.config.server.native.search-locations=classpath:properties
#注册到eureka上
eureka.client.service-url.defaultZone=http://localhost:9000/eureka
#以下是git配置
#git仓库地址
spring.cloud.config.server.git.uri=https://gitee.com/Ronny3/config-server.git
# git仓库地址下的相对地址,可以配置多个,用,分割。
spring.cloud.config.server.git.search-paths=config-server
#git仓库账号和密码
spring.cloud.config.server.git.username=Ronny3
spring.cloud.config.server.git.password=******
在浏览器中输入http://localhost:8100/neo-config/dev
查看配置中心是否配置好。
refresh 刷新
以下的配置都是在配置中心的客户端,也就是需要用到配置的服务模块中添加的设置。
Spring Cloud Config分服务端和客户端,服务端负责将git(或svn)中存储的配置文件发布成REST接口,客户端可以从服务端REST接口获取配置。但客户端并不能主动感知到配置的变化,从而主动去获取新的配置。客户端如何去主动获取新的配置信息呢?
springcloud已经给我们提供了解决方案,每个客户端通过POST
方法触发各自的/refresh
修改spring-cloud-config-client
项目已到达可以refresh的功能。添加的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
spring-boot-starter-actuator
是一套监控的功能,可以监控程序在运行时状态,其中就包括/refresh
的功能。
添加配置文件
在配置文件中添加如下配置
management.endpoints.web.exposure.include=refresh
开启更新机制
给需要用到配置的类上添加注解@RefreshScope
,添加上之后会在接到SpringCloud配置中心配置刷新的时候,自动将新的配置更新到该类对应的字段中。
重新拉取配置
以post请求的方式来访问http://localhost:8082/actuator/refresh
就会更新修改后的配置文件。