Вопрос:
Приложение My Spring Boot будет иметь 4 различные среды:
- Местный; выполняется локально на моей машине
- Dev
- UAT
- тычок
Когда новый пользователь регистрируется для моего приложения, бэкэнд отправляет им электронное письмо для подтверждения своего адреса/учетной записи. В этом письме будет ссылка; пользователь нажимает ссылку, которая проверяет их в базе данных, и позволяет им войти в систему и использовать приложение.
Разумеется, эти ссылки должны иметь встроенную среду:
- Локально, ссылка может быть http://localhost:9200/v1/data/accounts/verify?vt=12345
- В dev ссылка может быть:
- В UAT ссылка может быть:
- В Prod ссылка может быть:
Во всех трех средах порт hostname + отличается. Локально я указываю localhost:9200 (оба localhost + port). Не локально мне не нужно указывать порт, потому что приложение будет работать на узлах за балансировщиком нагрузки. В производстве мне не нужен подобный среде субдомен, такой как dev или uat.
Чтобы мои письма правильно работали во всех 4 средах, мне нужно установить переменную среды, которая затем используется генератором электронной почты для правильной генерации ссылок.
Я мог бы использовать что-то доморощенное, например, настраиваемое свойство в application.properties emailDomain как emailDomain, и устанавливать свойство, отличное в каждом файле свойств среды.
Но я чувствую, что умные люди, которые составляют сообщество Spring Boot, вероятно, уже решили эту проблему для меня… не так ли? Есть ли свойство приложения Spring Boot, которое я могу установить, что позаботится обо всем этом для меня?
Лучший ответ:
В комментариях я читал, что ваша главная задача – обновить свойство без необходимости изменять ваш.JAR/.WAR или изменять какой-либо код.
Это возможно, так как вы можете экпортировать конфигурацию загрузки Spring. Если вы проверите документы Externalized Configuration, вы увидите, что он ищет свойства внутри:
- Переменные среды ОС.
…
- Специфичные для приложения свойства приложения за пределами вашей упакованной банки (application-{profile}.properties и варианты YAML)
- Специфичные для приложения свойства приложения, упакованные в вашу банку (application-{profile}.properties и варианты YAML)
- Свойства приложения за пределами вашей упакованной банки (варианты application.properties и YAML).
- Свойства приложения, упакованные внутри вашей банки (варианты application.properties и YAML).
Таким образом, в идеале вы можете поместить файл application.properties рядом с вашим JAR и обновить свойства в этом файле в зависимости от среды, в которой вы работаете.