Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持

服务端

  1. 新建项目,修改pom.xml

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    
  2. 启动类加@EnableConfigServer注解

  3. 使用

    1. 创建一个git仓库

    2. 配置文件

      server.port=8801
      
      spring.application.name=service-config
      
      # git仓库地址
      spring.cloud.config.server.git.uri=https://gitee.com/ybd0612/ybd0612-config-test.git
      # 搜索路径
      spring.cloud.config.server.git.search-paths=config
      spring.cloud.config.server.git.username=ybd0612@qq.com
      spring.cloud.config.server.git.password=abbcb508cde6c7
      
    3. 启动

HTTP服务具有以下格式的资源:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
  • {application}映射到客户端的“spring.application.name”;
  • {profile}映射到客户端上的“spring.profiles.active”(逗号分隔列表); 和
  • {label}这是一个服务器端功能,标记“版本”的一组配置文件。

加密

要使用加密和解密功能,您需要在JVM中安装全面的JCE(默认情况下不存在)。您可以从Oracle下载“Java加密扩展(JCE)无限强度管理策略文件”,并按照安装说明(实际上将JRE lib / security目录中的2个策略文件替换为您下载的文件)

只有早于 8u161、7u171 和 6u181 的 JDK 8、7 和 6 更新才需要无限制策略文件,应该没人用那么低的版本吧

bootstrap.properties里面加encrypt.key

# 加密
curl localhost:8888/encrypt -d mysecret
# 解密
curl localhost:8888/decrypt -d 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda

要解密的位置值前面加{cipher},会自动解密

客户端

引入依赖

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

配置

spring.application.name=application
spring.cloud.config.profile=reception
spring.cloud.config.label=master
spring.cloud.config.uri=http://localhost:8801/

刷新

局部刷新

依赖

<!--        actuator-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

增加@RefreshScope注解

访问项目localhost:11001/actuator/refresh即可刷新

全局刷新

在config中引入依赖

<!--        bus-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

<!--        actuator-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

配置

# 配置rabbitmq
spring.rabbitmq.host=192.168.2.252
spring.rabbitmq.port=5672
spring.rabbitmq.username={cipher}639989404ed78b34b5af9f40414ca3d2f20f0b0729e7eb4d483c907cb86faf52
spring.rabbitmq.password={cipher}0fc8a937821e0e7cb68ddeda983b7f5f3bf63f8b66a65685c5a881a519c8b427

# 暴露端点
management.endpoints.web.exposure.include=bus-refresh

客户端也要引入bus依赖,配置mq

高可用

config引入依赖

<!--        eureka-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

配置文件

# 心跳检测
eureka.instance.lease-renewal-interval-in-seconds=2
# 心跳超时时间
eureka.instance.lease-expiration-duration-in-seconds=10
# 实例以ip作为链接,而不是取机器名
eureka.instance.ip-address=true
# 服务实例名称
eureka.instance.instance-id=${spring.application.name}-${server.port}
# 实例注册中心
eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka/

客户端配置在bootstrap中加

spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=service-config

eureka.client.service-url.defaultZone=http://eureka8761:8761/eureka/

去掉spring.cloud.config.uri=http://localhost:8801/配置

安全认证

pom引入依赖

<!--        security-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

配置账号密码

#配置访问账号
spring.security.user.name=hbnwEuLMhU4j2ubL6x8Me7aUzntTVUBE
#配置访问密码
spring.security.user.password=w0jy7EAyhoSMUsy78ikV4eb3n75tmpeh

客户端:

bootstrap.properties文件中配置访问账号和密码:

spring.cloud.config.username=hbnwEuLMhU4j2ubL6x8Me7aUzntTVUBE
spring.cloud.config.password=w0jy7EAyhoSMUsy78ikV4eb3n75tmpeh