#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. Убедитесь, что переменная установлена везде, где вы запускаете процесс (командная строка и т.д.).