Использование свойств Maven в application.properties в Spring Boot

Я пытаюсь загрузить свойства из pom.xml в application.properties. Я хочу создать два профиля: dev и prod, чтобы использовать разные URL-адреса базы данных. Я использую Jenkins в качестве CI, во всех моих приложениях (в основном Spring MVC, без проекта Boot) используются профили maven для развертывания в Tomcat. Есть ли возможность сделать это с помощью свойств maven? Я пробовал что-то подобное: spring.datasource.url=${jdbc.url}


person Jakub Pomykała    schedule 18.04.2016    source источник


Ответы (3)


Прежде чем это сделать, рассмотрите возможность экстернализации файла свойств из развертываемого пакета. Таким образом, вы можете развернуть одну и ту же компиляцию в любой среде. Это избавит вашего Дженкинса от работы, которая на самом деле не нужна. Лучше всего создать приложение только один раз, однако, если вы не уверены, вот как это сделать.

  1. В своем pom.xml определите профили с соответствующими значениями свойства.

    <profile>
        <id>dev</id>
       <properties>
           <jdbc.url>your_dev_URL</jdbc.url>
       </properties>
    </profile>
    
  2. Настройте подключаемый модуль Maven Resources для фильтрации каталога, содержащего ваше приложение .properties.

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        ...
    </build>
    
  3. Если вы используете Spring Boot 1.3 или более поздней версии, вы должны знать, что во избежание конфликтов между заполнителями Spring Boot и токенами, отфильтрованными плагином Maven Resources, в структуре введены решение, требующее использования другого синтаксиса для отфильтрованных значений.

    Теперь вместо ${property.key} вы должны использовать @property.key@. В этом случае ваш application.properties должен содержать следующий образец, чтобы он работал должным образом:

    [email protected]@
    

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

person Daniel Olszewski    schedule 19.04.2016
comment
Это не работает без использования тега ‹activeByDefault›. - person Alessandro C; 04.12.2017
comment
Профили Maven по умолчанию не активированы. Вам нужно активировать его самостоятельно. Вы можете активировать профиль с помощью флага -P при вызове сборки. Вы не обязаны использовать activeByDefault. - person Daniel Olszewski; 05.12.2017
comment
Обратите внимание: если вы используете формат yaml для свойств, убедитесь, что вы заключили заполнитель в одинарные кавычки: url '@jdbc.url@'. - person Valentin Grégoire; 23.05.2019
comment
ты знаешь, как перевернуть вещь? Доступ к свойствам приложения в pom xml - person c.sankhala; 22.03.2021
comment
Обратите внимание, что тестовые ресурсы не фильтруются. - person Pieter De Bie; 20.07.2021

Помимо Даниэля Ольшевского, в моем файле yml я получил ошибку: (Не используйте @ для отступа)

Поэтому я исправил это, добавив одинарные кавычки. Кто-то может счесть это полезным.

spring:
 datasource:
  url: '@jdbc.url@'
person Teodor Dimitrov    schedule 18.12.2019

Конечно, есть. Просто используйте Maven Filtering над своим приложением. properties, и Maven запишет в него значения вашего профиля.

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

См. также:

person Xtreme Biker    schedule 18.04.2016
comment
Вы можете увидеть мой ответ здесь: stackoverflow.com/questions/36635163/ для примера того, как экстернализировать свойства. - person Marco Tedone; 19.04.2016