无法从PCF中部署的Spring云配置服务器导入的配置文件中获取字段

问题描述 投票:0回答:1

我将 Spring Cloud 配置服务器部署在 PCF 服务器中(我的应用程序与配置服务器绑定)。我需要将所有常见配置移至单独的 .yml (import.yml) 文件并将其导入主配置文件中。当我尝试从邮递员测试配置服务器端点时,我能够从配置服务器看到所有字段(主要字段和导入字段)。但在控制器中我只能看到主配置文件中的字段。如果我尝试从 import.yml 文件中获取字段,则会得到 null。为什么它在邮递员中工作但在我的控制器类上不起作用?

application.yml

my:
  lastname: "Ramanathan"
spring:
  config:
    import: import.yml

导入.yml

my:
  firstname: "Thiagarajan"

邮递员

my:
  lastname: Ramanathan
  firstname: Thiagarajan

MyController.java

  @Value("${my.fistname:firstname not available}")
  private String firstname;

  @Value("${my.lastname:lastname not available}")
  private String lastname;
  
  public String somemethod()
  {
  
    log.error("firstname:" +firstname);
    log.error("lastname:" +lastname);
    
    log.error("env firstname:" +environment.getProperty("my.fistname"));
    log.error("env lastname:" +environment.getProperty("my.lastname"));
  
  }

输出:

firstname: firstname not available
lastname: Ramanathan
env firstname: null
env lastname: Ramanathan
spring spring-boot spring-cloud-config-server
1个回答
0
投票

你可以这样做。

首先在 application.yml 中创建您的 Config Server 配置。例如:

spring:
  application:
    name: config-server
  profiles:
    active: native

server:
  port: 8888

---

spring:
  config:
    activate:
      on-cloud-platform: none
  cloud:
    config:
      server:
        native:
          search-locations: classpath:/configurations-local

---

spring:
  config:
    activate:
      on-cloud-platform: cloudfoundry
  cloud:
    config:
      server:
        native:
          search-locations: classpath:/configurations-cloudfoundry

如果您也喜欢在本地测试您的服务器,则可以这样做。另外,根据您的要求,您需要指定配置的存储位置、本机位置或某个外部位置。

接下来,在本例中,创建文件夹configurations-local和configurations-cloudfoundry。现在,在其中再次为所有常见配置创建 application.yml。例如:

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics
  endpoint:
    health:
      probes:
        enabled: true

然后根据服务名称创建其他不常用配置的yml文件,例如myservice.yml yml 的名称取决于应用程序名称,spring 会自动将 application.yml 和 myservice.yml 绑定到您的服务。

在您的服务中,您需要在 application.yml 中添加类似的内容。

spring:
  application:
    name: myservice

---

spring:
  config:
    activate:
      on-cloud-platform: none
    import: optional:configserver:http://localhost:8888

---

spring:
  config:
    activate:
      on-cloud-platform: cloudfoundry
    import: optional:configserver:http://config-server:8888

因此名称必须与配置服务器中的非常见 yml 匹配,并且您需要指定导入到您的配置服务器。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.