Перейти к основному содержимому

Добавить свойства сборки в приложение Spring Boot

· 3 мин. чтения

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 .