Загрузка Spring, развернутая как WAR на tomcat, Как экспортировать application.properties для разных профилей (Dev, Test, Staging, Prod)

Я нахожусь в сценарии, когда я развертываю весеннюю загрузку как WAR на tomcat. Здесь, в этом приложении, у меня есть application.properties, у которого есть имя пользователя / пароль базы данных, некоторый URL-адрес, который помогает в использовании сервисов отдыха (URL-адреса зависят от среды). Теперь мне нужно получить учетные данные БД и URL-адреса в зависимости от среды, в которой он развернут. как этого добиться.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
4 157
4

Ответы 4

В соответствии с 24. Внешняя конфигурация этого должно быть достаточно для размещения определенных свойств профиля, например. application-dev.properties в пути к классам. Приоритет свойств:

...

  1. Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants).
  2. Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants).
  3. Application properties outside of your packaged jar (application.properties and YAML variants).
  4. Application properties packaged inside your jar (application.properties and YAML variants).

...

Однако это может работать немного иначе, если вы упаковываете как JAR в соответствии с 24.3 Файлы свойств приложения. Приоритет свойств:

  1. A /config subdirectory of the current directory
  2. The current directory
  3. A classpath /config package
  4. The classpath root

Я хочу поместить файлы в папку tomcat / webapp, чтобы системные инженеры могли просто перетащить туда файл и легко перенести войну в другое окружение.

juniorDeveloper 10.04.2018 19:12

Вы размещаете несколько веб-приложений в одном Tomcat и должны ли они использовать общую конфигурацию?

Karol Dowbecki 10.04.2018 19:15

Нет только одного веб-приложения. Если я помещаю различные файлы свойств, например, appliaction.dev.properties, application.test.properties, appli cation.prod.properties, в папку resources / config приложения, тогда как приложение узнает, в какой среде оно находится. Я развертываю приложение как WAR, а не как JAR, а во внешний tomcat не встроен

juniorDeveloper 10.04.2018 19:15

Тогда действительно не имеет значения, как вы это сделаете, каталог tomcat/config, вероятно, предпочтительнее, но на вашем месте я бы переупаковал приложение как работающий JAR вместо развертывания в Tomcat.

Karol Dowbecki 10.04.2018 19:17

его требование развернуть его на tomcat. Я пробовал сделать: @PropertySource (value = {"file: C: /Users/foo/apache-tomcat-8.5.‌ 28 / webapps / applicationati‌ on.properties}"}) это выдает ошибку 404, но если я скопирую путь из консоли и открыть его в файле проводника Windows фактически находится в этом месте.

juniorDeveloper 10.04.2018 19:40

Уф, жестко запрограммированный полный квалифицированный путь. Рассмотрите возможность использования, по крайней мере, таких переменных, как значение = {файл: config.path}, и передачи параметра через свойства системы, например -Dconfig.path = ...

Jan B. 10.04.2018 22:38

согласно обсуждению с Каролем, я предполагаю, что использование источников свойств, ссылающихся на путь к файловой системе, должно быть в порядке:

@Configuration
@PropertySource("${mywebapp.config.dir}/application.properties")
public class SpringConfig {
}

И просто укажите путь к аргументам JVM при запуске tomcat, например

-Dmywebapp.config.dir=file:/etc/mywebapp

Таким образом, вы можете развернуть одно приложение application.properties, различное для каждой среды.

Что касается вашего комментария:

@PropertySource (значение = {"file: C: /Users/foo/apache-tomcat-8.5.28/webapps/application.properties}"})

поскольку это системный путь Windows, вам может потребоваться двойная обратная косая черта для вашего пути: C: \\ Users \\ foo ...

На внешнем контейнере ex tomcat Вы можете передать конфигурацию, используя переменную Jndi в context.xml Эта переменная переопределяет локальное свойство, определенное в application.properties.

Или передайте -Dspring.profiles.active = env в сценарии запуска tomcat для выбора приложения, зависящего от среды application.properties если вы предпочитаете конфигурацию внутри войны

Вопрос1: Могу ли я получить местоположение моих файлов свойств из tomcat context.xml в spring @Resource Вопрос2: Нужно ли мне указывать все содержимое, доступное в моем application.properties, в tomcat context.xml и читать их в Spring. Пожалуйста, предложите, как этого добиться, и оцените, может ли кто-нибудь предоставить рабочий пример / учебное пособие для этого.

juniorDeveloper 11.04.2018 17:10

Я могу прочитать файл свойств из местоположения tomcat / webapp

для каждой среды я могу попросить системных инженеров перетащить файл в нужное место, Я не знаю, хорошее ли это решение. Пожалуйста, предложите

@PropertySource(value = {"file:C:/Users/foo/Downloads/apache-tomcat-8.5.28/webapps/application.properties"})

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