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

 更新时间:2018年12月14日 14:09:28   作者:mazhen1991  
这篇文章主要介绍了详解使用spring cloud config来统一管理配置文件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

其架构原理图大致如下:

我们将配置文件放入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 添加依赖

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.5.4.RELEASE</version>
</parent>

<!-- 导入Spring Cloud的依赖管理 -->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>Dalston.SR3</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka-server</artifactId>
      <exclusions>
        <exclusion>           
          <groupId>com.fasterxml.jackson.dataformat</groupId>
          <artifactId>jackson-dataformat-xml</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
  </dependency>
  <!-- 使用bus总线的方式通知所有的微服务配置文件需要刷新 -->
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
  </dependency>
</dependencies>

<build>
  <finalName>${project.artifactId}</finalName>
  <plugins>
    <!-- 资源文件拷贝插件 -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-resources-plugin</artifactId>
      <configuration>
        <encoding>UTF-8</encoding>
      </configuration>
    </plugin>
    <!-- java编译插件 -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <encoding>UTF-8</encoding>
      </configuration>
    </plugin>
  </plugins>
</build>

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 添加依赖

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

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实现实时更新通知

 

 

这个时候,我么通过@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系统中读取到的属性也是修改之后的了。

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

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

相关文章

  • spring boot如何基于JWT实现单点登录详解

    spring boot如何基于JWT实现单点登录详解

    这篇文章主要介绍了spring boot如何基于JWT实现单点登录详解,用户只需登录一次就能够在这两个系统中进行操作。很明显这就是单点登录(Single Sign-On)达到的效果,需要的朋友可以参考下
    2019-06-06
  • MySQL安装与idea的连接实现

    MySQL安装与idea的连接实现

    本文主要介绍了MySQL安装与idea的连接实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 一文教你如何使用Java灵活读取Excel内容

    一文教你如何使用Java灵活读取Excel内容

    这篇文章主要给大家介绍了关于如何使用Java灵活读取Excel内容的相关资料,读取Excel数据是Java开发中常见的任务,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Spring Boot + Spring Batch 实现批处理任务的详细教程

    Spring Boot + Spring Batch 实现批处理任务的详细教程

    这篇文章主要介绍了Spring Boot+Spring Batch实现批处理任务,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Java中的@RequiredArgsConstructor注解详解

    Java中的@RequiredArgsConstructor注解详解

    这篇文章主要介绍了Java中的@RequiredArgsConstructor注解详解,@RequiredArgsConstructor是Lombok的一个注解,简化了我们对@Autowired书写,@RequiredArgsConstructor注解可以代替@Autowired注解,需要的朋友可以参考下
    2024-01-01
  • Java中的魔法值解决

    Java中的魔法值解决

    这篇文章主要介绍了Java中的魔法值解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • java基础之类初始化顺序示例解析

    java基础之类初始化顺序示例解析

    这篇文章主要为大家介绍了java基础之类初始化顺序示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • spring初始化方法的执行顺序及其原理分析

    spring初始化方法的执行顺序及其原理分析

    这篇文章主要介绍了spring初始化方法的执行顺序及其原理分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Spring Boot在开发过程中常用IDEA插件

    Spring Boot在开发过程中常用IDEA插件

    这篇文章主要为大家介绍了Spring Boot在开发过程中常用IDEA插件,帮助大家提高开发工作效率,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • spring eurake中使用IP注册及问题小结

    spring eurake中使用IP注册及问题小结

    在开发spring cloud的时候遇到一个很奇葩的问题,就是服务向spring eureka中注册实例的时候使用的是机器名,然后出现localhost、xxx.xx等这样的内容,这篇文章主要介绍了spring eurake中使用IP注册,需要的朋友可以参考下
    2023-07-07

最新评论