Spring Boot Properties как переменные среды

Я сталкивался с некоторым поведением, которое кажется непоследовательным в том, как весенняя загрузка обрабатывает переменные среды в файлах свойств приложения против классов свойств конфигурации. Я не уверен, является ли это ошибкой весной или ошибкой в ​​моем понимании того, что "должно произойти".

я имею

@Data
@ConfigurationProperties("foo")
@Validated
public class ClientProperties {

    @NotBlank
    private String apiKey;

    @NotBlank
    private String uri;

}

в application.properties файл у меня есть:

foo.baseUri=https://system.appspot.com
foo.uri=${foo.baseUri}/Valuation?apikey=${foo.apiKey}&bar={bar}

Установка просто FOO_APIKEY

Если я запускаю мое приложение с:

export FOO_APIKEY=DEF

Тогда я получаю

APPLICATION FAILED TO START
***************************

Description:

Binding to target class ClientProperties(apiKey=null, uri=https://system.appspot.com/Valuation?apikey=DEF&bar={bar}) failed:

    Property: foo.apiKey
    Value: null
    Reason: may not be empty

Обратите внимание, что в URI ключ API задан, как и ожидалось, а также базовый URI.

Установка просто FOO_API_KEY

Далее, если вместо этого я пытаюсь установить только это свойство (удалить старый env var):

export FOO_API_KEY=ABC

Затем мое приложение запускается, но значения не соответствуют ожидаемым. Мои журналы показывают:

API Key: ABC.
URI Property: ${foo.baseUri}/Insurance?apikey=${foo.apiKey}&bar={bar}.

Обратите внимание, что теперь также исчезли базовый URI и ключ API.

Установка обоих свойств FOO_API_KEY и FOO_APIKEY

Когда я устанавливаю обе переменные среды, приложение запускается, но apiKey собственностью ClientProperties держит значение FOO_APIKEY экспорт, где как uri собственностью ClientProperties держит значение FOO_API_KEY экспорт.

API KEY IS: ABC.
URI IS: https://system.appspot.com/Insurance?apikey=DEF&bar={bar}.

Заметки

Мне на самом деле не нужно значение от ClientProperties.apiKey, Он используется только в приложении через ClientProperties.uri который уже решается в application.properties, Тем не менее, я указываю свойство, чтобы иметь возможность проверки, чтобы убедиться, что значение установлено. Я мог бы удалить значение из своего класса, и все было бы хорошо - ожидайте, тогда я потеряю свою проверку.

Весенняя загрузочная версия: 1.5.10.RELEASE

0 ответов

Другие вопросы по тегам