java集中管理配置文件_详解使用spring cloud config来统一管理配置文件

当一个系统中的配置文件发生改变的时候,我们需要重新启动该服务,才能使得新的配置文件生效,spring cloud config可以实现微服务中的所有系统的配置文件的统一管理,而且还可以实现当配置文件发生变化的时候,系统会自动更新获取新的配置。

其架构原理图大致如下:

9c21a630cc4c0c291e4b2b6b6904eef2.png

我们将配置文件放入git或者svn等服务中,通过一个Config Server服务来获取git中的配置数据,而我们需要使用的到配置文件的Config Client系统可以通过Config Server来获取对应的配置。

下面我们通过一个示例来演示一下config是如何被各个微服务系统获取到的。

1.向git中上传示例配置文件

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://127.0.0.1:3306/taotao?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true

jdbc.username=root

jdbc.password=root

文件名分别为:

microservice-dev.properties

microservice-production.properties

microservice-test.properties

对应不同的三个环境。

该文件的命名规则是:{application}-{profile}.properties

2.搭建Config Server

2.1 添加依赖

org.springframework.boot

spring-boot-starter-parent

1.5.4.RELEASE

org.springframework.cloud

spring-cloud-dependencies

Dalston.SR3

pom

import

org.springframework.cloud

spring-cloud-starter-eureka-server

com.fasterxml.jackson.dataformat

jackson-dataformat-xml

org.springframework.cloud

spring-cloud-config-server

org.springframework.cloud

spring-cloud-starter-bus-amqp

${project.artifactId}

org.apache.maven.plugins

maven-resources-plugin

UTF-8

org.apache.maven.plugins

maven-compiler-plugin

1.8

1.8

UTF-8

2.2 编写ConfigApplication

@EnableDiscoveryClient

@EnableConfigServer //开启配置服务

@SpringBootApplication

public class ConfigApplication {

public static void main(String[] args) {

SpringApplication.run(ConfigApplication.class, args);

}

}

2.3 编写yml配置文件

server:

port: 6688 #服务端口

spring:

application:

name: microservice-config-server #指定服务名

cloud:

config:

server:

git: #配置git仓库地址

uri: 具体的配置文件的git地址

#username:

#password:

rabbitmq: #RabbitMQ相关的配置

host: 127.0.0.1

port: 5672

username: guest

password: guest

eureka:

client:

registerWithEureka: true #是否将自己注册到Eureka服务中,默认为true

fetchRegistry: true #是否从Eureka中获取注册信息,默认为true

serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址

defaultZone: http://cloud:cloud@127.0.0.1:6868/eureka/

instance:

prefer-ip-address: true #将自己的ip地址注册到Eureka服务中

ipAddress: 127.0.0.1

management:

security:

enabled: false #是否开启actuator安全认证

这是我们启动该服务,访问该配置文件,访问路径示例如下(以该配置为例): 127.0.0.1:6688/microservice-dev.properties

访问路径的写法也有多种方式:

/{application}/{profile}/[label]

/{application}-{profile}.yml

/{label}/{application}-{profile}.yml

/{application}-{profile}.properties

/{label}/{application}-{profile}.properties

其中{label}是指分支,默认是master。

3. Config Client的搭建

3.1 添加依赖

org.springframework.cloud

spring-cloud-starter-config

org.springframework.boot

spring-boot-starter-actuator

org.springframework.cloud

spring-cloud-starter-bus-amqp

3.2 添加yml配置文件

eureka:

client:

serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址

defaultZone: http://cloud:cloud@127.0.0.1:6868/eureka/

spring:

cloud:

config:

name: microservice #对应的配置服务中的应用名称

profile: dev #对应配置服务中的{profile}

label: master #对应的分支

discovery:

enabled: true #启用发现服务功能

service-id: microservice-config-server #指定服务名称

spring:

application:

name: itcasst-microservice-config-server #指定服务名

cloud:

config:

server:

git: #配置git仓库地址

uri: http://172.16.55.138:10080/zhangzhijun/itcast-config-server.git

#username: zhangzhijun

#password: 123456

rabbitmq: #RabbitMQ相关的配置

host: 127.0.0.1

port: 5672

username: guest

password: guest

注意,这里的yml配置文件是:bootstrap.yml,它和application.yml文件一样,会被spring boot加载,但是bootstrap.yml会优先加载。

3.3 在application.yml文件中添加配置

management:

security:

enabled: false #是否开启actuator安全认证

3.4 利用git的webhook实现实时更新通知

3f26fecd477e3e73301723f0d054737e.png

2855d866159ac159bdef530916c562bf.png

231b04cafb744fa2984c7b02126fb4bb.png

这个时候,我么通过@Value的方式,就可以获取到对应的配置了。

@RefreshScope

@Component//加入到Spring容器

public class JdbcConfigBean {

@Value("${jdbc.url}")

private String url;

@Value("${jdbc.username}")

private String username;

@Value("${jdbc.password}")

private String password;

@Value("${jdbc.driverClassName}")

private String driverClassName;

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getDriverClassName() {

return driverClassName;

}

public void setDriverClassName(String driverClassName) {

this.driverClassName = driverClassName;

}

@Override

public String toString() {

return "JdbcConfigBean [url=" + url + ", username=" + username

+ ", password=" + password + ", driverClassName="

+ driverClassName + "]";

}

}

再次测试,我们发现当我们修改了git中的配置文件的内容之后,client系统中读取到的属性也是修改之后的了。

到此为止,其架构变成如下:

ee3e246bf7ee3447cd2483b9675d524d.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值