Как исключить приложение по умолчанию application.properties добавить файл настраиваемых свойств с использованием профилей в maven для проекта весенней загрузки?

Я разработал веб-приложение с использованием Spring Boot. У меня есть три папки ресурсов в src / main / resources staging, qa, production, которые состоят из свойств приложения и конфигурации ведения журнала для конкретной среды. Наряду с этими папками у меня есть application.properties и конфигурация журнала в папке ресурсов, которую я использую для среды разработки. Я хочу упаковать файл войны в соответствии со средой, используя плагин spring-boot-maven. Я новичок в maven, любая помощь будет оценена?


person Manu    schedule 16.08.2016    source источник


Ответы (2)


Конвекция application-{profileName}.properties

Пункты 10 и 11:

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html.

например application-test.properties он отменяет профиль application.properties Make в pom.xml

Введение в профили: http://maven.apache.org/guides/introduction/introduction-to-profiles.html

person Kamil Witkowski    schedule 16.08.2016
comment
Это работает для application.properties. Что мне делать с другими файлами конфигурации (пример журнала). - person Manu; 16.08.2016
comment
Не могли бы вы рассказать мне об этом подробнее logging configuration for the specific environment? Вы уверены, что не можете создавать переменные в application.properties, которые будут делать все и изменять их в зависимости от ваших потребностей? - person Kamil Witkowski; 16.08.2016
comment
Пути к файлам журнала будут разными в каждой среде. Мы можем создавать переменные в файлах application.properties, но application.properties не позволяет полностью настроить log4j2, поэтому я использую файлы конфигурации xml, специфичные для каждой среды. Что, если я хочу развернуть войну во внешнем контейнере, я не смогу передать информацию об активных профилях во время развертывания. Есть ли у вас какое-либо решение, чтобы при упаковке войны передавать только свойства, специфичные для окружающей среды? - person Manu; 16.08.2016

Вместо того, чтобы использовать Maven для добавления разных папок в путь к классам для каждой среды, вы можете использовать профили Spring.

Прежде всего создайте разные application.properties для каждой среды, например:

  • application-staging.properties
  • application-qa.properties
  • application-production.properties

Для ведения журнала вы можете использовать свойство logging.config. Итак, в application-staging.properties вы можете использовать:

logging.config=classpath:logback-staging.xml

В других файлах свойств вы можете использовать другие logging.config свойства.

Теперь просто запустите приложение со свойством spring.profiles.active.


Однако более простым решением было бы использовать внешняя конфигурация. Вместо того, чтобы перестраивать каждый раз, когда вы хотите изменить конфигурацию для определенного профиля, вы можете экстернализовать его, поместив файл application.properties рядом с вашим JAR / WAR в правильной среде, а не на вашем путь к классам. Spring boot подберет это автоматически.

Теперь вы также можете сделать внешнюю конфигурацию ведения журнала, поместив файл logback.xml (или log4j2.xml, ...) рядом с вашим JAR / WAR и просто сконфигурируйте свои (внешние) свойства приложения с помощью:

logging.config=file:logback.xml

Это позволяет вам редактировать вашу конфигурацию и регистрацию без изменения вашего JAR / WAR.

person g00glen00b    schedule 16.08.2016
comment
При развертывании во внешнем контейнере tomcat я просто добавляю файл войны в папку webapps и перезапускаю контейнер. Итак, я должен добавить правильный файл application.properties при упаковке войны. Как я могу этого добиться во время упаковки? ›››› Просто запустите свое приложение с spring.profiles.active, что означает mvn spring-boot: run -Dspring.profiles.active = staging (это то, что вы пытаетесь сказать) - person Manu; 16.08.2016
comment
Да, использование -Dspring.profiles.active=staging должно работать. Вы также должны иметь возможность настроить это свойство в своем контейнере Tomcat. - person g00glen00b; 16.08.2016