При внедрении @Value с помощью Spring, можете ли вы указать свойство propertySource для использования? - PullRequest
0 голосов
/ 25 апреля 2019

Например, у меня есть два свойства 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?

Спасибо:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...