欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-21 14:22:18
...

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

前言

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

远程git仓库

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

新建一个git仓库

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

然后新建一个mysql的配置文件
一个测试
一个dev
SpringCloud 使用SpringCloudConfig搭建远程配置中心

然后提交到Github

点击红色区域获取git链接
SpringCloud 使用SpringCloudConfig搭建远程配置中心

内容如下


# 数据库驱动:
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 

配置eureka注册中心

导入config-server依赖

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

		<!--        添加eureka 服务依赖-->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>

配置yml文件

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




#tomcat端口
server:
  port: 5001


spring:
  application:
    #指定服务名称
    name: config-server

  #配置服务注册中心
  cloud:
    config:
      server:
        git:
          #git地址
          uri: https://github.com/pomestyle/spring-config-server.git
          # git账号密码
          #username: ××××××××
          #password: ××××××××
          #本地仓库
          basedir: D:/localGit/
          #也可以使用私钥链接远程仓库
          #private-key:

# eureka 服务配置
eureka:
  client:
    registerWithEureka: false  #是否将自己注册到Eureka服务中,本身就是服务,所以无需注册
    fetchRegistry: false # 是否从Eureka 中获取注册信息
    serviceUrl:  # Eureka 客户端与Eureka服务端进行交互的地主
      defaultZone: http://127.0.0.1:6868/eureka/

  instance:
    #将自己的ip注册到eureka服务中
    prefer-ip-address: true







main 启动类

config-server作为一个服务必须要注册到eureka才能被其他服务发现调用,所以需要 EnableDiscoveryClient

//启用configServer
@EnableConfigServer
//启用eurekaServer 服务端
@EnableEurekaServer
//启用eurekaClient 客户端
@EnableDiscoveryClient

@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搭建远程配置中心
  • 分支访问

访问mysql-dev.properties
SpringCloud 使用SpringCloudConfig搭建远程配置中心

访问mysql-test.properties

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

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

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

代码地址 传送门

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.yml 改为bootstrap.yml
bootstrap.yml 文件启动优先于 applicatin.yml 伴随着服务器启动并访问远程配置中心

# cloud-config-client配置
spring:
  cloud:
    config:
      name: mysql #对应config server Url中的{application}
      profile: dev #配置环境,对应config server Url中的{profile}
      label: master #配置分支(不配置则默认:git则是master,svn则是trunk),
      uri: http://127.0.0.1:5001/ #配置中心地址


获取文件内容

@RestController
@RefreshScope
public class TestController {

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

    @GetMapping("/getMessage")
    public String getPassword(){
        return this.password;
    }
}