1. Обзор
В этой статье мы рассмотрим механизм расширения свойств, предоставляемый Spring через методы сборки Maven и Gradle.
2. Maven
2.1. Конфигурация по умолчанию
Для проектов Maven, использующих spring-boot-starter-parent , нет необходимости в дополнительных конфигурациях для использования расширений свойств:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
Теперь мы можем расширить свойства нашего проекта с помощью @ … @ заполнителей.
Вот пример того, как мы можем сохранить версию проекта, взятую из Maven, в наши свойства:
----[email protected]@[email protected]@
----
Мы можем использовать только эти расширения в файлах конфигурации, соответствующих этим шаблонам:
-
/application ** .yml
-
/application ** .yaml
-
/application ** .properties
2.2. Ручная настройка
В отсутствие родителя spring-boot-starter-parent нам необходимо настроить эту фильтрацию и расширение вручную. Нам потребуется включить элемент resources в раздел < _ build> нашего файла pom.xml_ :
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>** ** /application** .yml</include>
<include>** ** /application** .yaml</include>
<include>** ** /application** .properties</include>
</includes>
</resource>
</resources>
И в < _ плагинов> _ :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<delimiters>
<delimiter>@</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
В случаях, когда необходимо использовать стандартные заполнители типа $ \ {variable.name} , нам нужно установить для useDefaultDelimeters значение true , и ваши application.properties будут выглядеть следующим образом:
expanded.project.version=${project.version}
expanded.project.property=${custom.property}
3. Gradle
3.1. Стандартное решение Gradle
Https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html[solution]из документации Spring Boot не может быть на 100% совместим со свойством Maven. фильтрация и расширение.
Чтобы позволить нам использовать механизм расширения свойств, нам нужно включить в build.gradle следующий код:
processResources {
expand(project.properties)
}
Это ограниченное решение со следующими отличиями от конфигурации по умолчанию Maven:
, Не поддерживает свойства с точками (например, user.name) . Gradle
понимает точки как разделители свойств объекта ,
, Используются стандартные заполнители со знаком доллара по умолчанию $ \ {…}
со стандартными пружинными заполнителями
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) в the build.gradle , но теперь мы можем использовать файл gradle.properties для определения свойств в стандартном формате свойств Java, и он также поддерживает свойства с точками (например, database.url ) .
Эта сборка фильтрует только файлы конфигурации проекта, а не все ресурсы, и на 100% совместима с решением Maven.
4. Заключение
В этом кратком руководстве мы увидели, как автоматически расширять свойства Spring Boot, используя методы сборки Maven и Gradle, и как мы можем легко перейти с одного на другой.
Полный исходный пример можно найти over на GitHub .