likes
comments
collection
share

SpringCloud 使用SpringCloudConfig搭建远程配置中心,包含手动刷新以及Bus总线刷新

作者站长头像
站长
· 阅读数 19

文章目录

SpringCloud 使用SpringCloudConfig配置远程配置中心

前言

随着服务数量越来越多,模块越来越多我们的各种服务的配置文件也越来越多,同时多个服务在项目中采用配置文件的方式,越来越显得力不从心,往往一次更改配置文件很是麻烦,这时候SpringCloudConfig出现,他的出现让我们集中配置配置文件,服务端集中管理,客户端一次读取,同时采用更改推送的方式,即时同步更新配置文件,可谓方便至极,极大的解放了长修改多个配置文件生产力。

远程git仓库

首先需要注册一个远程存储配置文件的存储仓库,用来存储各种配置文件。

新建一个git仓库

SpringCloud 使用SpringCloudConfig搭建远程配置中心,包含手动刷新以及Bus总线刷新

然后新建一个mysql的配置文件 一个测试 一个dev SpringCloud 使用SpringCloudConfig搭建远程配置中心,包含手动刷新以及Bus总线刷新

然后提交到Github

点击红色区域获取git链接 SpringCloud 使用SpringCloudConfig搭建远程配置中心,包含手动刷新以及Bus总线刷新

内容如下

# 数据库驱动:
driverClassName=com.mysql.jdbc.Driver
# 数据库链接地址:
url=jdbc:mysql://101.10.10.10:3306/db_app?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
#数据库用户名:
username=root 
# 数据库密码: 
password=root 

配置注册中心

导入config-server依赖


	<!--    springcloud 依赖管理-->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Greenwich.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
				<exclusions>
				</exclusions>
			</dependency>
		</dependencies>
	</dependencyManagement>


	<!--    子功能依赖-->

	<dependencies>
<!--		config-server 依赖-->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>

	</dependencies>
 

配置yml文件

1 需要配置将此服务注册到注册中心,这里采用也可以自己注册自己,注册到注册中心可以让其他服务进行读取配置。 需要说明当config-server启动的时候会把远端git仓库拉取到本地,至于拉到本地哪,在下面的 basedir 配置。 2 远端git可以使用账号密码,也可以配置私钥访问,比如配置 private-key

#指定服务名称
spring.application.name=config-server
#tomcat端口
server.port=5001

#配置服务注册中心

#配置git仓库地址
spring.cloud.config.server.git.uri=https://github.com/pomestyle/spring-config-server.git
#配置仓库路径
#spring.cloud.config.server.git.searchPaths=respo
#配置仓库的分支
spring.cloud.config.label=master
# 访问git仓库的用户名
#spring.cloud.config.server.git.username=your username
#访问git仓库的用户密码
#spring.cloud.config.server.git.password=your password

main 启动类

在程序的启动类 ConfigServerApplication 通过 @EnableConfigServer 开启 SpringCloudConfig 服务端

//启用configServer
@EnableConfigServer
@SpringBootApplication
public class SpringcloudconfigserverApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringcloudconfigserverApplication.class, args);
	}

}

访问配置文件

启动config-server 在启动完成后我们可以按照如下规则访问 config-server 服务端

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

label : git仓库的分支

application :配置文件的文件名,如我的残酷里的clientOne.yml 中的“clientOne”,对应服务的应用名,这个后面再说

profile:这个很熟悉,配置文件的后缀,可以对应服务启用的环境

访问配置文件

  • 默认访问 默认访问的是master分支 SpringCloud 使用SpringCloudConfig搭建远程配置中心,包含手动刷新以及Bus总线刷新
  • 分支访问

访问mysql-dev.properties SpringCloud 使用SpringCloudConfig搭建远程配置中心,包含手动刷新以及Bus总线刷新

访问mysql-test.properties

SpringCloud 使用SpringCloudConfig搭建远程配置中心,包含手动刷新以及Bus总线刷新

yaml格式的配置,使用properties格式的也是一样的

SpringCloud 使用SpringCloudConfig搭建远程配置中心,包含手动刷新以及Bus总线刷新

或者 http://127.0.0.1:5001/mysql/dev 访问

SpringCloud 使用SpringCloudConfig搭建远程配置中心,包含手动刷新以及Bus总线刷新

config-client客户端

添加依赖


        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!--eurekaClient-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

main方法

//启动eureka客户端服务
@EnableEurekaClient

yml

将applicatin.properties改为bootstrap.properties bootstrap.properties 文件启动优先于 applicatin.properties伴随着服务器启动并访问远程配置中心

# cloud-config-client配置
 
spring.application.name=config-server
#指明远程仓库的分支
spring.cloud.config.label=master
spring.cloud.config.name=mysql-test
#指明配置文件环境
#dev开发环境配置文件
#test测试环境
#pro正式环境
spring.cloud.config.profile=test
#指明配置服务中心的网址
spring.cloud.config.uri=http://127.0.0.1:5001/
server.port=8080

获取文件内容

在程序的启动类 ConfigClientApplication 通过 @Value 获取服务端的 password 值的内容

@SpringBootApplication
@RestController
public class SpringcloudconfigclientApplication {

    @Value("${password}")
    private String password;

    @GetMapping("/getMessage")
    public String getPassword(){
        System.out.println("password =  " + password);
        return this.password;
    }


    public static void main(String[] args) {
        SpringApplication.run(SpringcloudconfigclientApplication.class, args);
    }

}

访问

SpringCloud 使用SpringCloudConfig搭建远程配置中心,包含手动刷新以及Bus总线刷新

2 使用eureka作为注册中心配置

服务端配置

application.properties 配置文件基本不变

#指定服务名称
spring.application.name=config-eureka-server
#tomcat端口
server.port=5003
#配置服务注册中心
#配置git仓库地址
spring.cloud.config.server.git.uri=https://github.com/pomestyle/springcloud.git
#配置仓库路径
spring.cloud.config.server.git.searchPaths=springcloud-config/spring-config-server
#配置仓库的分支
spring.cloud.config.label=master
# 访问git仓库的用户名
#spring.cloud.config.server.git.username=your username
#访问git仓库的用户密码
#spring.cloud.config.server.git.password=your password


#添加 eureka 注册中心地址
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6868/eureka/

添加eureka启动依赖

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

main方法 @EnableEurekaClient 启动eureka服务端提供者服务

//启用configServer
@EnableConfigServer
@EnableEurekaClient
@SpringBootApplication
public class SpringcloudconfigserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudconfigserverApplication.class, args);
    }

}

启动可以访问

SpringCloud 使用SpringCloudConfig搭建远程配置中心,包含手动刷新以及Bus总线刷新

客户端client

拉取的配置应用名字 的配置 spring.application.name=mysql-test 是配置文件的名字

bootstrap.properties 配置文件

#tomcat端口
server.port=5004

#password=12333333

# 拉取的配置应用名字
spring.application.name=mysql-test

#springboot 1.5.X 以上默认开始开通了安全认证
management.security.enabled=false

#指明远程仓库的分支
spring.cloud.config.label=master
#指明配置文件
spring.cloud.config.profile=dev

#添加 eureka 注册中心地址
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6868/eureka/
#是从配置中心读取文件。
spring.cloud.config.discovery.enabled=true
#配置中心的servieId,服务名称,通过服务名称去 Eureka注册中心找服务
spring.cloud.config.discovery.serviceId=config-eureka-server

spring.cloud.config.server.git.uri:配置git仓库地址 spring.cloud.config.server.git.searchPaths:配置仓库路径 spring.cloud.config.label:配置仓库的分支 spring.cloud.config.server.git.username:访问git仓库的用户名 spring.cloud.config.server.git.password:访问git仓库的用户密码 eureka.client.serviceUrl.defaultZone:eureka注册中心地址

main方法启动

@SpringBootApplication
@EnableEurekaClient
@RestController
@RefreshScope // 使用该注解的类,会在接到SpringCloud配置中心配置刷新的时候,自动将新的配置更新到该类对应的字段中。
public class SpringcloudconfigserverApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudconfigserverApplication.class, args);
    }

    @Value("${password}")
    private String password;

    @GetMapping("/getMessage")
    public String getPassword() {
        System.out.println("password =  " + password);
        return this.password;
    }


}

Config配置信息⼿动、自动刷新

当我们的配置中心值修改了,n那么我们的客户端在获取的时候也需要修改,如果是一些db等配置信息在使用,修改之后不能实时同步到内存中,而又不能重启配置中心服务。

此时一是可以使用手动刷新客户端使⽤post去触发refresh,获取最新数据。

  • 1 首先Client客户端添加依赖springboot-starter-actuator
		 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
  • 2 Client客户端bootstrap.yml中添加配置(暴露通信端点)
# Spring Boot 健康检查
management:
  endpoints:
    web:
      exposure:
        include: "*" # 暴露所有接口
        #include: refresh

然后请求接口 进行手动刷新http://localhost:port/actuator/refresh

第二种方法是使用消息总线Bus自动刷新机制 点击我

代码地址 点击我