使用 Spring-Cloud-Connectors 配置 Spring Boot 以使用 PWS Config-Server

Posted

技术标签:

【中文标题】使用 Spring-Cloud-Connectors 配置 Spring Boot 以使用 PWS Config-Server【英文标题】:Configuring Spring Boot with Spring-Cloud-Connectors to use the PWS Config-Server 【发布时间】:2017-08-23 09:11:02 【问题描述】:

我很难配置我的 Spring Boot 应用程序以连接到通过 Spring-Cloud-Connectors 提供的 PWS(Pivotal Web 服务)Config-Server

在 manifest.yml 中,配置服务器绑定到应用程序,这由相应的 VCAP_SERVICES 条目正确反映:

applications:
- name: edge-service-webapp-myapp
  services:
  - infrastructure-config-server
  memory: 512M
  env:
    TRUST_CERTS: api.run.pivotal.io
    SPRING_PROFILES_DEFAULT: cloud
  instances: 1
  host: edge-service-webapp-myapp
  domain: cfapps.io
  buildpack: java_buildpack


 "VCAP_SERVICES": 
  "p-config-server": [
   
    "credentials": 
     "access_token_uri": "https://p-spring-cloud-services.uaa.run.pivotal.io/oauth/token",
     "client_id": "p-config-server-84d66ea6-ebc6-xxx",
     "client_secret": "***",
     "uri": "https://config-b4320676-xxx.cfapps.io"
    , ...

应用程序是使用 spring-boot-starter-parent 1.5.2.RELEASE、spring-cloud-dependencies Camden.SR5 和 spring-cloud-services-dependencies 1.4.1.RELEASE 构建的。我还使用 spring-cloud-starter-config 和 spring-boot-starter-cloud-connectors 作为显式依赖项。

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.pivotal.spring.cloud</groupId>
                <artifactId>spring-cloud-services-dependencies</artifactId>
                <version>1.4.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Camden.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
             ....
        </dependencies>
    </dependencyManagement>

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

当我 curl 配置服务器时,我可以看到可用于应用程序名称 (my-app) 和活动“云”配置文件的应用程序版本。

spring:
  application:
    name: my-app
  cloud:
    config:
      enabled: true


curl -H "Authorization: Bearer XXX" https://config-b4320676-xxx.cfapps.io/tradefoundry/cloud
"name":"my-app","profiles":["cloud"],"label":"master","version":"389e4f909ff1303332167b2159b4d75201109d69","state":null,"propertySources":["name":"https://gitlab.com/myapp/configuration.git/myapp-cloud.properties","source":"spring.thymeleaf.cache":"true","message":"Hello Cloud!","name":"https://gitlab.com/myapp/configuration.git/myapp.properties","source":"server.compression.enabled":"true","spring.thymeleaf.cache":"true","application.version":"0.0.1","name":"https://gitlab.com/myapp/configuration.git/application.properties","source":"server.compression.enabled":"true","spring.thymeleaf.cache":"true","application.cache.busting.enabled":"false","application.version":"0.0.1-20170202195700","server.compression.mime-types":"application/json,application/xml,text/html,text/xml,text/plain,text/css,application/javascript"]

但应用程序在启动时仍然失败,抱怨缺少属性 application.version。

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myWebappApplication': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'application.version' in value "$application.version"

我在这里缺少什么?我以为云连接器都是通过自动配置即插即用的!?

欢迎任何帮助!

【问题讨论】:

【参考方案1】:

要使用 PWS 上提供的 Spring Cloud Services 配置服务器,您需要使用一组不同的客户端库,如 PWS docs 所示。

spring-boot-starter-cloud-connectorsspring-cloud-starter-config 上的依赖项替换为仅此一个依赖项:

<dependency>
  <groupId>io.pivotal.spring.cloud</groupId>
  <artifactId>spring-cloud-services-starter-config-client</artifactId>
</dependency>

Spring Cloud Services 配置服务器在开源 Spring Cloud Config 服务器之上添加了额外的基于 OAuth2 的安全性。此客户端库自动进行 OAuth 协商。

【讨论】:

你拯救了我的一天! ...现在我觉得跳过那部分文档有点愚蠢...马虎我... 文档很棒 - 一旦您发现它们的存在以及它们的居住地。这些可能不是最容易找到的文档。很高兴听到这解决了您的问题。

以上是关于使用 Spring-Cloud-Connectors 配置 Spring Boot 以使用 PWS Config-Server的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)