Как получить переменную окружения ОС для аннотации уровня класса @PropertySource при весенней загрузке?

#java #spring-boot

#java #весенняя загрузка

Вопрос:

Мне нужно использовать переменную ENV в строковом значении, которое затем должно быть передано в @PropertySource аннотацию уровня класса. Но это не работает, String значение передается как есть:

     @Configuration
    @PropertySource(value = "./#{systemEnvironment['SERVICE_ENVIRONMENT']}/${spring.profiles.active}.properties")

    public class ApplicationSecretProperties {
                  ...
        }
  

Кроме того, во многих ответах предлагалось использовать System.getenv("SERVICE_ENVIRONMENT") , используя что во время компиляции возникает следующая ошибка:

 The value for annotation attribute PropertySource.value must be a constant expression
  

Ответ №1:

Не уверен, что SpEL допустим для этой аннотации (JavaDocs не указывают так или иначе). Но среда ОС уже привязана к среде Spring для вас. Вы пробовали:

 @PropertySource(value = "file:./${SERVICE_ENVIRONMENT}/${spring.profiles.active}.properties")
  

Вы, вероятно, также хотите использовать file: префикс, чтобы четко указать, как найти файл.

Комментарии:

1. Да, я пробовал это, это работает, когда я устанавливаю переменную окружения в IDE, но не выполняется в реальном сценарии.

2. @ankitMISHRA проверьте, доступна ли env для пользователя

3. Это также должно работать из командной строки или где-либо еще, а не только в IDE. Убедитесь, что переменная установлена везде, где вы запускаете процесс (командная строка и т.д.).