Spring Cloud Config 干货

1.部分依赖

//这个依赖项是所有Spring Cloud 项目使用的
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
// 包含了spring-cloud-server 的核心库  前两个可以构成config的作用 将信息注册到git 之类的
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
//调用方使用  包含了与Spring Cloud配置服务器交互所需的所有类
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-config-client</artifactId>
    </dependency>

2.@EnableConfigServer

使服务称为SpringCloud Config 的服务

3.服务端配置 application.xml (参考)

server:
  port: 8888
spring:
  cloud:
    config:
      server:
        encrypt.enabled: false
        git:
          uri: https://github.com/carnellj/config-repo/     #uri 提供要连接的存储库
          searchPaths: licensingservice,organizationservice  #告诉config在云配置服务器启动时应该在Git存储库中搜索的相对路径 逗号分隔的由配置服务托管的服务列表
          username: native-cloud-apps
          password: 0ffended


####
#Classpath and file-based solution
####

#server:
#   port: 8888
#spring:
#  profiles:
#    active: native
#  cloud:
#     config:
#       server:
#           native:
#              searchLocations: file://<chapter 3>/confsvr/src/main/resources/config/licensingservice,
#                               file://<chapter 3>confsvr/src/main/resources/config/organizationservice
###              #searchLocations: classpath:config/,classpath:config/licensingservice

4.建立许可证服务对Spring Cloud Config服务器的依赖

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

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

增加依赖 配置boostrap.yml

spring:
application:                        指定许可证服务的名称,以便Config 客户端知道正在查找哪个服务
  name: licensingservice    这里的应用的名字则是 licensingservice .yml 配置在远程仓库git上面的
profiles:
  active:
    default  指定服务应该运行的默认profile oprofile映射到环境
cloud:    指定Spring Cloud Config 服务器的位置
  config:
    uri: http://localhost:8888

使用mvn spring-boot: run
默认自动尝试使用端点 http://localhosst:8888 和 对应bootstrap.yml 文件中活跃的profile
想覆盖的话可以使用

java -Dspring.cloud.config.uri=http:8888
	   -Dsrping.profiles.active=dev
	   -jar target/licensing-service-0.0.1-SNAPSHOT.jar

5.可以使用@Value直接读取属性

@Component
public class ServiceConfig{

  @Value("${example.property}")
  private String exampleProperty;

  public String getExampleProperty(){
    return exampleProperty;
  }
}

6.SpringCloud 配置服务器刷新属性 @RefreshScope

始终获得最新的配置属性

@SpringBootApplication
@RefreshScope
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

该注解只会冲洗加载应用程序配置中的自定义Spring属性。
该注解允许开发团队访问/refresh端点,强制springboot应用程序重新读取配置。

问题:同一服务的多个实例正在运行,需要使用新的应用程序偶配置刷新所有的服务。
解决:
1.Springcloud 配置服务确实提供了一种称为Springcloud BUs的“推送”机制,
使Springcloud配置服务器能够向所有 使用服务的客户端发布有更改发生的信息。
Springcloud配置需要一个恩爱的中间件(RabbitMQ)运行。这是监测更改的非常有用。
但并不是所有的SpringCloud配置后端都支持这种"推送”机制。(也就是Consul服务器)
2.编写简单脚本来查询服务发现引擎以查找服务的所有实例,并直接调用/refresh端点。
3.重新启动所有服务器或容器来接受新的属性。特别是Docker等容器服务中运行服务时。
重新启动Docker容器差不多需要几秒,然后将强制重新读取应用程序配置。

7.保护敏感的配置信息 加密解密

(1)下载并安装加密所需的Oracle JCE jar。
(2)创建加密密钥 设置一个对称加密秘钥
export ENCRYPT_KEY=IMSYMMETRIC
对称秘钥:1、对称秘钥的长度应该是12个或更多个字符,最好是一个随机的字符集。
2、不要丢失对称秘钥。一旦使用加密秘钥加密某些东西,如果没有对称秘钥就无法解密。
(3)加密和解密属性
其中要加密密码 一下是 Docker-compose.yml中配置了密码

version: '2'
services:
  database:
    extends:
      file: ../common/docker-compose.yml
      service: database
    environment:
      POSTGRES_USER: "postgres_dev"
      POSTGRES_PASSWORD: "p0stgr@s_dev"
      POSTGRES_DB:       "eagle_eye_dev"
  configserver:
    extends:
      file: ../common/docker-compose.yml    下面有 另一个docker-compose.yml的配置
      service: configserver
  licensingservice:
     image: ch3-thoughtmechanix/licensing-service
     ports:
       - "8080:8080"
     environment:
       PROFILE: "dev"
       CONFIGSERVER_URI: "http://configserver:8888"
       CONFIGSERVER_PORT:   "8888"
       DATABASESERVER_PORT: "5432"

http://localhost:8888/encrypt
加密p0stgr@s
返回一段加密后的结果4788dfe1ccbe6485934aec2ffeddb06163ea3d616df5fd75be96aadd4df1da91
前面的 licensingservice.yml (git上面的配置文件)如下

example.property: "I AM IN THE DEFAULT"
spring.jpa.database: "POSTGRESQL"
spring.datasource.platform:  "postgres"
spring.jpa.show-sql: "true"
spring.database.driverClassName: "org.postgresql.Driver"
spring.datasource.url: "jdbc:postgresql://database:5432/eagle_eye_local"
spring.datasource.username: "postgres"
spring.datasource.password: "{cipher}4788dfe1ccbe6485934aec2ffeddb06163ea3d616df5fd75be96aadd4df1da91"
spring.datasource.testWhileIdle: "true"
spring.datasource.validationQuery: "SELECT 1"
spring.jpa.properties.hibernate.dialect: "org.hibernate.dialect.PostgreSQLDialect"
redis.server: "redis"
redis.port: "6379"
signing.key: "345345fsdfsf5345"

要求所有已加密的属性前面加上{cipher}
它会告诉SpringCloud配置服务器它正在处理已加密的值。
但是在查询http://localhost:8888/licensingservice/defalult 的时候 发现密码被解密了。有问题

(4)配置微服务已在客户端使用加密

一、配置SpringCloud Config 不要再服务器端解密属性

server:
port: 8888
spring:
cloud:
 config:
   server:
     encrypt.enabled: false !!!!!!服务器端设置
     git:
       uri: https://github.com/carnellj/config-repo/
       searchPaths: licensingservice,organizationservice
       username: native-cloud-apps
       password: 0ffended

二、在许可证服务器上设置对称秘钥。
因为许可证服务现在负责解密已加密的属性,所以需要先在许可证服务上设置对称秘钥,方式是确保ENCRYPT_KEY
环境变量与 SpringCloud Config服务器使用的对称秘钥相同(如前面的IMSYMMETRIC)
./common/docker-compose.yml中配置了


version: '2'
services:
configserver:
  image: johncarnell/tmx-confsvr:chapter3
  ports:
     - "8888:8888"
  environment:
    ENCRYPT_KEY:       "IMSYMMETRIC"					##这里给许可证服务配置对称秘钥的信息
database:
  image: postgres:9.5
  ports:
    - "5432:5432"
  environment:
    POSTGRES_USER: "postgres"
    POSTGRES_PASSWORD: "p0stgr@s"
    POSTGRES_DB:       "eagle_eye_local"
licensingservice:
  image: johncarnell/tmx-licensing-service:chapter3
  ports:
    - "8080:8080"
  environment:
    PROFILE: "default"
    CONFIGSERVER_URI: "http://configserver:8888"
    CONFIGSERVER_PORT:   "8888"
    DATABASESERVER_PORT: "5432"
    ENCRYPT_KEY:       "IMSYMMETRIC"

三、将Spring-security-rsa JAR增加到许可证服务的pom.xml文件中
增加依赖

 <dependency>
     <groupId>org.springframework.security</groupId>
     <artifactId>spring-security-rsa</artifactId>
 </dependency>

学习与Spring微服务实战

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值