1. Введение
Обычно конфигурация сборки нашего проекта содержит довольно много информации о нашем приложении. Часть этой информации может понадобиться в самом приложении. Таким образом, вместо того, чтобы жестко кодировать эту информацию, мы можем использовать ее из существующей конфигурации сборки.
В этой статье мы увидим, как использовать информацию из конфигурации сборки проекта в приложении Spring Boot.
2. Информация о сборке
Допустим, мы хотим отобразить описание и версию приложения на главной странице нашего веб-сайта.
Обычно эта информация присутствует в pom.xml
:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-boot</artifactId>
<name>spring-boot</name>
<packaging>war</packaging>
<description>This is simple boot application for Spring boot actuator test</description>
<version>0.0.1-SNAPSHOT</version>
...
</project>
3. Ссылка на информацию в файле свойств приложения
Теперь, чтобы использовать приведенную выше информацию в нашем приложении, нам нужно сначала сослаться на нее в одном из файлов свойств нашего приложения:
application-description=@project.description@
application-version=@project.version@
Здесь мы использовали значение свойства сборки project.description
для установки свойства приложения application-description
. Точно так же версия приложения
задается с помощью project.version
.
Наиболее важным моментом здесь является использование символа @
вокруг имени свойства. Это говорит Spring расширить именованное свойство из проекта Maven.
Теперь, когда мы создадим наш проект, эти свойства будут заменены их значениями из pom.xml
.
Это расширение также называется фильтрацией ресурсов. Стоит отметить, что такая фильтрация применяется только к производственной конфигурации . Следовательно, мы не можем использовать свойства сборки в файлах src/test/resources
.
Следует также отметить, что если мы используем флаг addResources , цель
spring-boot:run
добавляет src/main/resources
непосредственно в путь к классам. Хотя это полезно для горячей перезагрузки, это позволяет обойти фильтрацию ресурсов и, следовательно, эту функцию.
Теперь указанное выше расширение свойства работает «из коробки», только если мы используем spring-boot-starter-parent
.
3.1. Расширение свойств без spring-boot-starter-parent
Давайте посмотрим, как мы можем включить эту функцию без использования зависимости spring-boot-starter-parent .
Во-первых, мы должны включить фильтрацию ресурсов внутри элемента <build/>
в нашем pom.xml
:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
Здесь мы включили фильтрацию ресурсов только в src/main/resources
.
Затем мы можем добавить конфигурацию разделителя для maven-resources-plugin
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimiter>@</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
Обратите внимание, что мы указали для свойства useDefaultDelimiters значение
false
. Это гарантирует, что стандартные заполнители Spring, такие как ${placeholder}, не будут расширены сборкой.
4. Использование информации о сборке в файлах YAML
Если мы используем YAML для хранения свойств приложения, возможно, мы не сможем использовать @
для указания свойств сборки . Это связано с тем, что @
является зарезервированным символом в YAML.
Но мы можем преодолеть это, либо настроив другой разделитель в maven-resources-plugin
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimiter>^</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
Или просто переопределив свойство resource.delimiter
в блоке свойств нашего pom.xml
:
<properties>
<resource.delimiter>^</resource.delimiter>
</properties>
Затем мы можем использовать ^
в нашем файле YAML:
application-description: ^project.description^
application-version: ^project.version^
5. Вывод
В этой статье мы увидели, как мы можем использовать информацию о проекте Maven в нашем приложении. Это может помочь нам избежать жесткого кодирования информации, которая уже присутствует в конфигурации сборки проекта в файлах свойств нашего приложения.
И, конечно же, код, сопровождающий это руководство, можно найти на GitHub .