Java 无法使用环境变量实例化yaml变量列表:无法解析值中的占位符

Java 无法使用环境变量实例化yaml变量列表:无法解析值中的占位符,java,spring-boot,yaml,Java,Spring Boot,Yaml,我试图在我的application.yaml文件的列表中设置一些环境变量,但收到以下错误消息: java.lang.IllegalArgumentException:无法解析值中的占位符“SOME_ID” ${SOME\u ID},${other\u ID} 我的应用程序.yaml文件中有以下值: com: foo: product-ids: ${SOME_ID},${ANOTHER_ID} 这些值在其他一些yaml文件中设置,例如: application: env: tes

我试图在我的
application.yaml
文件的列表中设置一些环境变量,但收到以下错误消息:

java.lang.IllegalArgumentException:无法解析值中的占位符“SOME_ID” ${SOME\u ID},${other\u ID}

我的
应用程序.yaml
文件中有以下值:

com:
  foo:
    product-ids: ${SOME_ID},${ANOTHER_ID}
这些值在其他一些yaml文件中设置,例如:

application:
  env: test

subEnv:
  - name: SOME_ID
    value: "foo"
  - name: ANOTHER_ID
    value: "bar"
我的服务如下所示:

@Service
public class Service {
  private final List<String> productIds;

  public Service(
          @Value("#{'${com.foo.product-ids}'.split(',')}") List<String> productIds) {
    this.productIds = productIds;
  }
  ...
}
但这不是我正在寻找的解决方案;我希望能够将我的变量添加到此列表中

编辑:这是我的
应用程序中的大部分/相关数据。yaml

spring:
  application:
    name: my-service
server:
  port: 8080
management:
  endpoint:
    metrics:
      enabled: true
    prometheus:
      enabled: true
  endpoints.web.exposure.include: "*"
  server:
    port: 9080
  security:
    enabled: false
  metrics:
    export:
      prometheus:
        enabled: true
    distribution:
      sla:
        http.server.requests: ${CORE_COMMON_BACKEND_SLA:PT1S}
com:
  foo:
    product-ids: ${SOME_ID},${ANOTHER_ID}
编辑2:

我应该注意,如果不使用列表,我可以很好地访问这些变量

因此,如果我做一些类似的事情:

com:
  foo:
    product-id1: ${SOME_ID}
    proudct-id2: ${ANOTHER_ID}
并相应地修改代码,这是可行的,但我仍然不希望将其作为我的解决方案


出于某种原因,在my
products ids
列表中引用变量似乎是一个问题…

它涉及到spring引导加载YAML配置文件的顺序

在您的情况下,订单13和15适用

因此,当您在测试用例中使用@ActiveProfiles(“test”)时,应该将特定于环境的配置文件命名为:application test.yaml


然后你的应用程序.yaml应该正确地从特定于环境的配置文件加载属性。

你应该发布
application.yml
@DoNhuVy updated的完整内容对不起,我不确定我是否正确理解你的意思,…我已经有一个application-test.yaml文件,但它只包含有关日志级别的内容。另外,我想我应该提到,在“初始化”方法中有很多其他字段,我为其他属性字段分配随机测试值,我省略了这些字段,它们与这个问题无关,所以我认为这部分应该可以。
spring:
  application:
    name: my-service
server:
  port: 8080
management:
  endpoint:
    metrics:
      enabled: true
    prometheus:
      enabled: true
  endpoints.web.exposure.include: "*"
  server:
    port: 9080
  security:
    enabled: false
  metrics:
    export:
      prometheus:
        enabled: true
    distribution:
      sla:
        http.server.requests: ${CORE_COMMON_BACKEND_SLA:PT1S}
com:
  foo:
    product-ids: ${SOME_ID},${ANOTHER_ID}
com:
  foo:
    product-id1: ${SOME_ID}
    proudct-id2: ${ANOTHER_ID}