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}