无法使用PCF配置服务器服务中的配置客户端应用程序读取属性值

时间:2019-01-09 15:18:14

标签: spring-boot gitlab spring-cloud pivotal-cloud-foundry pcf

  

在我的PCF日志中,config-client应用程序给出   “ ConfigServicePropertySourceLocator:无法找到PropertySource:   401未经授权”

我有gitlab存储库,可在PCF配置服务器中提供属性文件。 如果我检查配置服务器->管理->它会给出“ 配置服务器在线”

我在哪里缺少配置?

bootstrap.yml config-client-app

spring:
  application:
    name: <config-client-name>
  cloud:
    config:
      enabled: true
      name: <config-server-instance-name>
      uri: <uri details from view credential modal>
#      username: <tried different permutations to get it working>
#      password: <tried different permutations to get it working>
management: 
  security: 
    enabled: false

manifest.yml config-client-app

applications:
- name: <app-name>
  host: <app-name>
  memory: 1024M
  instances: 1
  path: /target/<app-name>-0.0.1-SNAPSHOT.jar
  buildpack: java_buildpack_offline
  services:
    - <pcf config server instance name>
  env:
    SPRING_PROFILES_ACTIVE: dev

我已经做了很多工作以获得一些结果,但是没有运气,示例应用程序运行良好。 我已经在github存储库中尝试了自己的config-server和config client应用程序,并且工作正常。

但是在PCF中,我完全陷入困境,请帮忙。

2 个答案:

答案 0 :(得分:0)

您的配置看起来没有任何问题。如果您看到Config服务器在PCF中处于在线状态,则意味着config服务已正确初始化并可以使用。

但是让我们尝试适合您的示例应用程序。

如果您使用gradle build,请在build.gradle中添加以下信息(或相应添加pom.xml。)

  1. SCS(Spring Cloud services)(提到的版本与springBootVersion = '2.0.6.RELEASE'兼容,如果您使用的是其他版本的spring-boot,请检查其可比性。)

    导入{

        mavenBom "io.pivotal.spring.cloud:spring-cloud-services-dependencies:2.0.1.RELEASE"
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:Finchley.RELEASE"
    
     }
    
  2. 包括配置客户端依赖项

compile("io.pivotal.spring.cloud:spring-cloud-services-starter-config-client")

现在让我们转到bootstrap.yml: 仅以下信息即可选择属性

spring:
  application:
    name: <config-client-name>

如果您在推送到PCF时使用了相同的有效配置文件,则无需在application.yml中进行更改。

答案 1 :(得分:0)

@Avhi-您的回答帮助了我。

我的错误是我使用了错误的依赖关系,并且添加了不必要的信息。在 bootstrap.yml

spring:
  application:
    name: <config-client-name>
  cloud:
    config:
      enabled: true
      name: <config-server-instance-name>
      uri: <uri details from view credential modal>
#      username: <tried different permutations to get it working> 
#      password: <tried different permutations to get it working>
management: 
  security: 
    enabled: false

name: <config-server-instance-name>,我们应该配置要从客户端应用程序指向的属性文件名,我正在提供配置服务器实例名。 注意:我了解到我们可以指定多个用逗号分隔的属性文件。

uri: <uri details from view credential modal>
#      username: <tried different permutations to get it working> 
#      password: <tried different permutations to get it working>

以上三个属性没有用,因此我浪费了大部分时间。

除非我们要在localhost:8080应用程序中绑定配置服务器服务,否则无需设置这些值。

在我们的manifest.yml中提供服务名称没有任何危害,并且由于它不是应用程序的一部分,因此不会造成任何麻烦。顺便说一句,我们可以使用CLI或PCF App Manager Web控制台来创建服务并将其绑定到我们的应用程序。

完成所有设置后,我们可以期望Spring Security网页输入用户名和密码(显然我们不知道)。如果配置了spring安全性,那么很好,或者我们可以在测试时禁用。

我做了两件事来禁用和激活执行器的所有端点(就像我在使用spring-boot 2.x)

添加了如下依赖关系:

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

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

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-rsa</artifactId>
    <!-- <version>1.0.5.RELEASE</version> -->
</dependency>

并创建SecurityConfiguration以显式禁用安全性

@Configuration
@EnableWebSecurity
public class SecurityConfiguration  extends WebSecurityConfigurerAdapter{
    @Override
    protected void configure(HttpSecurity http) throws Exception{
        http.csrf().disable();
        http.authorizeRequests().antMatchers("/").permitAll();
    }
}

要使所有执行器端点均可访问,我已执行以下操作:

management: 
  endpoints: 
    web: 
      exposure: 
        include: "*"