Рубрики
Без рубрики

Автоматическое расширение свойств с пружинным загрузчиком

Узнайте о механизме расширения свойств, предоставляемом Spring с помощью методов сборки Maven и Gradle.

Автор оригинала: 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 по умолчанию:

  1. Не поддерживает свойства с точками (например, user.name). Gradle понимает точки как разделители свойств объектов
  2. Фильтрует все файлы ресурсов, а не только определенный набор конфигурационных файлов
  3. Использует стандартные заполнители знака доллара $ { … } , таким образом, конфликтующие со стандартными заполнителями 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 .