spring cloud day07config

Posted 左沩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring cloud day07config相关的知识,希望对你有一定的参考价值。

参考文档: https://www.cnblogs.com/ityouknow/p/6892584.html  获取git资源规则 http://m.blog.csdn.net/u014792352/article/details/73163714 加减密
http://blog.csdn.net/qq_22841811/article/details/67637796主要来源

  • Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持。使用Config Server,您可以在所有环境中管理应用程序的外部属性。
  • 客户端和服务器上的概念都与Spring Environment和PropertySource抽象相同,因此它们非常适合Spring应用程序,但可以与任何语言运行的应用程序一起使用。
  • 当应用程序通过从开发环境到测试环境和生产环境的部署管道时,您可以管理这些环境之间的配置,并确保应用程序在迁移时需要运行所需的一切。服务器存储后端的默认实现使用git,因此它可以轻松支持配置环境的标记版本,并且可以通过各种工具来访问内容。
一、创建一个服务端和客户端,服务端实现从git上获取文件, 1、服务端开发,maven依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
application.yml配置 
  • uri可以是一个git地址具体规则稍后介绍
server:
  port: 8080
spring:
  cloud:
    config:
      server:
        git:
          uri: https://git.coding.net/eggyer/learn-spring-cloud-config.git
  • 编写启动类(@EnableConfigServer)
package com.clsaa.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

/**
 * Created by eggyer on 2017/3/13.
 */
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApp 
    public static void main(String[] args) 
        SpringApplication.run(ConfigServerApp.class,args);
    
我们可以通过 http://localhost:8080/application-application.yml 获取数据

应用和数据获取映射规则

  • application:spring.application.name
  • label:git上的分支名
  • profile:文件名
获取git上的资源信息遵循如下规则
/application/profile[/label]
/application-profile.yml
/label/application-profile.yml
/application-profile.properties
/label/application-profile.properties
注意事项
特别注意:上面这些与spring-cloud相关的属性必须配置在bootstrap.properties中,config部分内容才能被正确加载。因为config的相关配置会先于application.properties,而bootstrap.properties的加载也是先于application.properties。
  • 当我们用这种url路径访问时会得到json数据

    "name": "foobar-dev.yml",
    "profiles": [
        "master"
    ],
    "label": "master",
    "version": "5fd6ff5dc6ffab7b8aec5e4f6828218d5028f907",
    "state": null,
    "propertySources": [
        
            "name": "https://git.coding.net/eggyer/learn-spring-cloud-config.git/application.yml",
            "source": 
                "document": "profile:profile-default"
            
        
    ]

   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
2、 SpringCloudConfig-Client
  • bootstrap.x里面的配置 —>链接config server 加载远程配置 —>加载application.x里的配置,所以我们要使用bootstrap.yml
  • 本地同名配置会被远程的覆盖
  • spring官方建议我们在bootstrap中放置不更改的属性.

  • bootstrap.yml

spring:
  cloud:
    config:
     uri: http://localhost:8080
     profile: dev #对应业务名称的profile
     label: master #当配置文件在git上时为分支名
  application:
    name: foobar  #对应文件的业务名称

   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • application.yml
server:
  port: 8081
   
  • 1
  • 2
  • APP
package com.clsaa.springcloud.config;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Created by eggyer on 2017/3/13.
 */
@SpringBootApplication
public class ConfigClientApp 
    public static void main(String[] args) 
        SpringApplication.run(ConfigClientApp.class,args);
    


   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • controller
package com.clsaa.springcloud.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by eggyer on 2017/3/13.
 */

@RestController
public class ConfigClientController 
    //取配置文件中的值
    @Value("$profile")
    private String profile;

    @GetMapping("/profile")
    public String getProfile()
        return profile;
    


   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
二、git仓库配置详解
  • 分别创建git仓库special和simple,在两个仓库下加入配置文件application.yml,内容分别为profile: special;profile: simple
  • 在configserver配置文件编写

  • 使用一个微服务一个配置

server:
  port: 8080
spring:
  cloud:
    config:
      server:
        git:
          uri: https://git.coding.net/eggyer/application
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 访问http://localhost:8080/master/simple-default.yml显示:profile: simple
  • 可以发现我们可以用仓库名放入URL中(这样我们可以让每一个微服务单独使用一个git仓库,更容易进行权限管理)
  • 个人建议一个配置环境一个文件

1、使用一种环境一种配置

server:
  port: 8080
spring:
  cloud:
    config:
      server:
        git:
          uri: https://git.coding.net/eggyer/application-profile
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2、模式匹配

  • 在special下添加两个配置文件special-dev.yml,special-test.yml
server:
  port: 8080
spring:
  cloud:
    config:
      server:
        git:
          uri: https://git.coding.net/eggyer/learn-spring-cloud-config.git
          repos:
            simple: https://git.coding.net/eggyer/simple
            special:
              pattern: special*/dev*,*special*/test*    #/用来隔开application和environment(开发环境)
              uri: https://git.coding.net/eggyer/special
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
3、路径搜素
server:
  port: 8080
spring:
  cloud:
    config:
      server:
        git:
          uri: https://git.oschina.net/it-much/config-repo-51cto-video      # 公用
          search-paths:
            - foo   # foo路径
            - bar   # bar路径

4、账号密码
server:
  port: 8080
spring:
  cloud:
    config:
      server:
        git:
          uri: https://git.oschina.net/it-much/config-repo-51cto-video
          username: 
          password: 

三、传输加解密
加密技术主要为两种,一种是对称加密,一种是非对称加密
采用对称加密技术
$ curl localhost:8888/encrypt -d mysecret
682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
The inverse operation is also available via /decrypt (provided the server is configured with a symmetric key or a full key pair):

$ curl localhost:8888/decrypt -d 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
mysecret
  
  • 1
config server 的加密解密需要依赖与java Cryptography Extension (jce)  
安装方式:可以参考里面的README,其实也很简单:把jdk下面 /jre/lib/security 目录下面的两个jar替换了。
配置文件
server:
  port: 8080
spring:
  cloud:
    config:
      server:
        git:
          uri: https://git.oschina.net/it-much/config-repo-51cto-video
          username: 
          password: 
          
encrypt:
  key: foo
这样加解密就实现了

用户认证

server部分

  • pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-microservice-study</artifactId>
        <groupId>com.clsaa.learn.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

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

</project>
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

server:
  port: 8080
spring:
  cloud:
    config:
      server:
        git:
          uri: https://git.coding.net/eggyer/learn-spring-cloud-config.git
security:
  basic:
    enabled: true
  user:
    name: user
    password: password
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

client部分

  • 在bootstrap文件中加入 
    • 在uri下可以加入username和password属性,优先级比uri中高
    • 那么为什么springcloud会提供两种方式?
    • 生产环境中configserver需要高可用(可能有多个) 
      • 上面方式中如果需要负载均衡需要部署nginx等组件
      • 节点信息被硬编码在配置文件中
      • 没有充分发挥服务发现的优势所在
    • 那么我们需要让configclient也具有服务发现的功能,让其通过eureka自动的寻找到configserver
spring:
  cloud:
    config:
     uri: http://user:password@localhost:8080
     profile: dev #对应业务名称的profile
     label: master #当配置文件在git上时为分支名
  application:
    name: foobar  #对应文件的业务名称

  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

10.7 通过Eureka发现configserver

  • 添加pom文件
    <!-- 添加Eureka的依赖 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>

配置服务与注册中心联合使用

在生产环境中,我们可能会将Config Server 与 Eureka等注册中心联合使用(注意:目前Spring Cloud只支持与Eureka及Consul联合使用,不支持与Zookeeper联合使用),下面讲解如何将Config Server与 Eureka 联合使用。

准备工作

  1. 启动服务microservice-discovery-eureka ;
  2. 和上文一样,准备好几个配置文件,命名规范为项目名称-环境名称.properties ,本文使用的名称是microservice-config-client-eureka-dev.properties 。

代码示例

服务器端代码示例:

Spring Cloud Config 和 Spring Cloud Vault 的初始化顺序

spring cloud config客户端未从配置服务器加载配置

:初探Spring Cloud Config配置集中管理

:初探Spring Cloud Config配置集中管理

Spring cloud config - 加载附加文件

day07-OpenFeign-服务调用