首页 > 编程 > Java > 正文

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

2019-11-26 09:26:40
字体:
来源:转载
供稿:网友

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

其架构原理图大致如下:

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

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

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

jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/taotao?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=truejdbc.username=rootjdbc.password=root

文件名分别为:

microservice-dev.propertiesmicroservice-production.propertiesmicroservice-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 //开启配置服务@SpringBootApplicationpublic 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: guesteureka:  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.1management: 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系统中读取到的属性也是修改之后的了。

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表