Например, у меня есть два свойства 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, что-то вроде:
// 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;
Это тоже не сработало. Я пробовал много разных синтаксисов без успеха.
Я даже не уверен, возможно ли это или нет? Предостережение заключается в том, что наименование секретов (id: пароль) одинаково для всех секретов aws моей корпорации.
Итак, вопрос в том, можем ли мы указать имя свойстваSource для использования в @Value?
Спасибо:)