例如,我有两个propertySource(CompositePropertySource),它们包含相同的属性(从执行器/ env端点中提取):
{"propertySources": [
{
"name": "aws-secrets-manager:my-api-1",
"properties": {
"id": {
"value": "ABC"
},
"password": {
"value": "123"
}
}
},
{
"name": "aws-secrets-manager:my-api-2",
"properties": {
"id": {
"value": "JKL"
},
"password": {
"value": "567"
}
}
},
{
"name": "systemProperties"
....
}
]}
如您所见,我有两个propertySource,它们包含相同的属性但值不同(它们用于存储外部API的秘密)。
如果我只有一个propertySource并且尝试插入id值:
@Value("${id}")
private String api1Id;
它运行完美。
但是我想做的是注入2个不同服务,即2 propertySource的ID,例如:
// MyApi1Service.class
@Value("${aws-secrets-manager:my-api-1.id}")
private String api1Id;
// MyApi2Service.class
@Value("${aws-secrets-manager:my-api-2.id}")
private String api2Id;
这不起作用,因为SpEL将分号解释为默认值,因此我得到了api1Id="my-api-1.id"
和api2Id="my-api-2.id"
。没问题。
所以我尝试以与systemProperties
相同的方式进行操作:
@Value("#{systemProperties['java.runtime.name']}")
这样做:
// MyApi1Service.class
@Value("#{aws-secrets-manager:my-api-1['id']}")
private String api1Id;
它不起作用。 我尝试过:
// MyApi1Service.class
@Value("#{'${aws-secrets-manager:my-api-1}'['id']}")
private String api1Id;
它也不起作用。我尝试了许多不同的语法,但均未成功。
我什至不确定是否可行?需要注意的是,我所有公司的aws机密的名称(id:密码)都是相同的。
所以问题是:我们可以指定要在@Value中使用的propertySource的名称吗?
谢谢:)