Spring Cloud Config

config是Spring Cloud中的配置中心,在正式场景中,存在修改配置的情况,每次配置的修改都要进行重新打包,这是非常麻烦的一件事,可能还伴随着其他问题的引发。而config就可以将一些与启动无关的配置进行动态修改,并生效。以前要数据库进行配置的,现在也可以在config中完成。

快速入门

Config服务端

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

bootstrap.yml

# Spring properties
spring:
  application:
     name: config-service  # Service registers under this name
  cloud:
    config:
      server:
        git:
          uri: https://github.com/zoeminghong/spring-cloud-demo.git
          search-paths: config-repo #文件搜索路径
          username: username #账号
          password: password #密码
      name: appzone #application name
      label: master #分支
#  profiles:
#    active: native #当不使用git时,可以设置为native,获取config服务下main/java/resources本地配置


# Map the error path to error template (for Thymeleaf)
error:
  path=/error

# Discovery Server Access
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://root:123456@${eureka.instance.hostname}:8761/eureka/
# 注册到eureka服务,账号:密码@地址
# HTTP Server
server:
  port: 7001   # HTTP (Tomcat) port

Main.java

@EnableConfigServer
@SpringBootApplication
@EnableDiscoveryClient
public class ConfigApplication {
    public static void main(String[] args) {
        new SpringApplicationBuilder(ConfigApplication.class).web(true).run(args);
    }
}

Config客户端

pom配置是与服务端是一样的

spring:
  cloud:
#  config的相关配置
    config:
      label: master
      profile: dev
      uri: http://localhost:7001/ #config Service address
      name: appzone #application name
      discovery:
        enabled: true #whether enable service-id
        service-id: CONFIG-SERVICE #config service application name on the eureka
      username: root # regisit centre's username
      password: 123456 # regisit centre's password
#      fail-fast: true # 没有连接配置服务端时直接启动失败
# Spring properties
  application:
     name: order-service  # Service registers under this name
  freemarker:
    enabled: false           # Ignore Eureka dashboard FreeMarker templates
  thymeleaf:
    cache: false

# Discovery Server Access
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://root:123456@${eureka.instance.hostname}:8761/eureka/

# HTTP Server
server:
  port: 2222   # HTTP (Tomcat) port

main.java

@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(OrderApplication.class).web(true).run(args);
    }
}

深入学习

刷新配置

git配置目录下的文件发生更改时,需要更新通知到服务,使用@RefreshScope可以帮助实现配置的刷新。

实现方式:

在指定的配置类下使用@RefreshScope,如若git配置发生变化,使用http://相应服务地址/refresh ,(POST)。

也可以:

重启服务在application.yml中启用endpoints.restart.enabled=true,调用http://相应服务地址/restart ,(POST)服务。

-往往存在一些场景,refresh是不会生效的,因而,使用restart时比较保险的操作,但restart耗时比较长。故建议,在没有特殊的处理的配置类中使用@RefreshScope来实现refresh,存在比较复杂,且要求比较高的配置项,还是使用restart比较靠谱。

模式的匹配

spring:
cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo
          repos:
            simple: https://github.com/simple/config-repo
            special:
              pattern: special*/dev*,*special*/dev*
              uri: https://github.com/special/config-repo
            local:
              pattern: local*
              uri: file:/home/configsvc/config-repo

当不存在pattern时,{application}/{profile}则根据key来决定,例如simple中,匹配的是simple/*,如local中,匹配的是local*/*

本地存储路径控制:

在使用的config服务的时候,其会clone一份缓存到本地,如果你要指定路径可以使用spring.cloud.config.server.git.basedir

使用本地加载配置文件:

需要配置:spring.cloud.config.server.native.searchLocationsspring.profiles.active=native。 路径配置格式:classpath:/, classpath:/config,file:./, file:./config

基于文件的资源库:

在基于文件的资源库中(i.e. git, svn and native),这样的文件名application*命名的资源在所有的客户端都是共享的(如 application.properties, application.yml, application-*.properties,etc.)。

加密与解密

如果远程属性包含加密内容(以{cipher}开头),这些值将在通过HTTP传递到客户端之前被解密。

实现方式下载解压JCE,并复制至JDK/jre/lib/security文件夹下,Maven依赖”org.springframework.security:spring-security-rsa”。

环境配置

config相关配置需要在bootstrap.yml中进行配置,在实际开发中存在调试环境,开发环境,测试环境,线上环境等场景,因而,对bootstrap.yml进行配置环境化配置是很必须的。

可以bootstrap-[environment].yml,默认是会读取bootstrap.yml和bootstrap-default.yml中的配置。若需要读取其他环境的配置,可在bootstrap.yml中设置

#spring环境和config中的配置都会使用该环境的配置
spring:
	profile:
		active: environment

只是想更改config中的环境:

spring:
	cloud:
		config:
			profile: environment

Tips

如果config的客户端需要使用service-id这种负载均衡的方式获取config服务端的配置信息,需要注意将注册中心的信息和config服务的信息都写于bootstrap.yml下,

否则可能存在找不到config服务。

config中文文档

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SnailTyan

Bootstrap中的color,bgcolor,background-clor,border-color

版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.cs...

7620
来自专栏腾讯云TStack专栏

手把手教你打造 SDN 网路 (二) (安装准备)

在安装完 Vagrant 和 Virtualbox 就可以开始进行,如果用的是 Windows 建议可以下载 Cmder 这个 Console Emulator...

10720
来自专栏TalkPython

使用Flask和Vue.js开发一个单页面应用程序(三)

我们的目标是设计一个后端RESTful API,由Python和Flask提供支持。API本身应该遵循RESTful设计原则,使用基本的HTTP请求方式:GET...

11210
来自专栏纯洁的微笑

今天来聊Java ClassLoader

类加载机制作为一个高频的面试题经常会在面试中被问到,前几天一个电话面试就问到,之前有了解过,但是没有梳理成自己的体系,所以说的有点凌乱,今天花点时间整理一下,分...

9220
来自专栏后端技术

netty源码解析 ServerBootstrap.bind(port)

在ServerBootstrap内,从bind方法一路跟进到private ChannelFuture doBind(final SocketAddress l...

15930
来自专栏IT云清

Java虚拟机-02:类与类加载器

摘要:本文主要介绍类加载器、类的唯一性、启动类加载器、拓展类加载器、应用程序类加载器。

9920
来自专栏编程微刊

Bootstrap Table写一个Demo

基于 Bootstrap 的 jQuery 表格插件,通过简单的设置,就可以拥有强大的单选、多选、排序、分页,以及编辑、导出、过滤(扩展)等等的功能。

41720
来自专栏京程一灯

13个帮你提高开发效率的现代CSS框架[每日前端夜话0x67]

本文将向你介绍一系列顶级CSS框架。有些人可能听说过,也可能对有些人是全新的。但它们都提供了各种有用的先进功能,可以改善你的工作流程。开始吧!

13240
来自专栏后端技术

tomcat 启动分析(1)脚本运行

这个脚本的最终目的还是启动catalina.bat,而且把附带参数start和运行该脚本另外提供的参数。

11630
来自专栏JAVA葵花宝典

搞定SpringBoot2,我推荐你学习这个框架

SpringBoot_v2项目是努力打造springboot框架的极致细腻的脚手架。包括一套漂亮的前台。无其他杂七杂八的功能,原生纯净。

31330

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励