Автор оригинала: Roman Seleznov.
1. Обзор
В этой статье мы рассмотрим механизм расширения свойств, предоставляемый Spring с помощью методов сборки Maven и Gradle.
2. Maven
2.1. Конфигурация по Умолчанию
Для проектов Maven , использующих spring-boot-starter-parent , нет необходимости в дополнительных конфигурациях для использования расширений свойств:
org.springframework.boot spring-boot-starter-parent 2.3.3.RELEASE
Теперь мы можем расширить свойства вашего проекта с помощью @…@ заполнителей. Вот пример того, как мы можем сохранить версию проекта, взятую из Maven, в наши свойства:
Мы можем использовать эти расширения только в конфигурационных файлах, соответствующих этим шаблонам:
- **/application*.yml
- **/application*.yaml
- **/применение*.свойства
2.2. Ручная настройка
В отсутствие spring-boot-starter-parent parent нам нужно будет настроить эту фильтрацию и расширение вручную. Нам нужно будет включить элемент resources в раздел < build> вашего pom.xml файл:
${basedir}/src/main/resources true **/application*.yml **/application*.yaml **/application*.properties
И в < плагинах> :
org.apache.maven.plugins maven-resources-plugin 2.7 @ false
В тех случаях, когда требуется использовать стандартные заполнители типа ${variable.name} нам нужно будет установить useDefaultDelimeters в true , и ваш application.properties будет выглядеть следующим образом:
expanded.project.version=${project.version} expanded.project.property=${custom.property}
3. Грэдл
3.1. Стандартное решение Gradle
Gradle solution из документации Spring Boot не на 100% совместим с фильтрацией и расширением свойств Maven.
Чтобы позволить нам использовать механизм расширения свойств, нам нужно будет включить следующий код в build.gradle :
processResources { expand(project.properties) }
Это ограниченное решение со следующими отличиями от конфигурации Maven по умолчанию:
- Не поддерживает свойства с точками (например, user.name). Gradle понимает точки как разделители свойств объектов
- Фильтрует все файлы ресурсов, а не только определенный набор конфигурационных файлов
- Использует стандартные заполнители знака доллара $ { … } , таким образом, конфликтующие со стандартными заполнителями Spring
3.2. Maven-Совместимое Решение
Чтобы реплицировать стандартное решение Maven и использовать заполнители стиля @…@ , нам нужно добавить следующий код в наш build.gradle :
import org.apache.tools.ant.filters.ReplaceTokens processResources { with copySpec { from 'src/main/resources' include '**/application*.yml' include '**/application*.yaml' include '**/application*.properties' project.properties.findAll().each { prop -> if (prop.value != null) { filter(ReplaceTokens, tokens: [ (prop.key): prop.value]) filter(ReplaceTokens, tokens: [ ('project.' + prop.key): prop.value]) } } } }
Это позволит решить все свойства проекта. Мы все еще не можем определить свойства с помощью точек (например, user.name) в build.gradle , но теперь мы можем использовать файл gradle.properties для определения свойств в стандартном формате свойств Java, а также он поддерживает свойства с точками (например, database.url).
Эта сборка фильтрует только файлы конфигурации проекта, а не все ресурсы, и она на 100% совместима с решением Maven.
4. Заключение
В этом кратком руководстве мы увидели, как автоматически расширять свойства Spring Boot с помощью методов сборки Maven и Gradle и как легко переходить от одного к другому.
Полный исходный пример можно найти на GitHub .