Spring boot starter parent что это

от admin

Introduction to Spring Boot Starter Parent

author Ranga Karanam February 22, 2023 2 minutes

Image

This guide will help you understand how Spring Boot Starter Parent helps with managing dependency versions, the java version used by project and the default configuration for plug-ins.

Image

You will learn

  • What is Spring Boot Starter Parent?
  • What are the important features of Spring Boot Starter Parent?
  • When do you use Spring Boot Starter Parent?

Tools you will need

  • Maven 3.1+ is your build tool
  • Your favorite IDE. We use Eclipse.
  • JDK 17

What is Spring Boot Starter Parent?

In pom.xml, all Spring Boot projects normally utilise spring-boot-starter-parent as the parent.

Parent poms’ let you handle the following for several child projects and modules:

  • Configuration — Java Version and Other Properties
  • Depedency Management — Version of dependencies
  • Default Plugin Configuration

What is inside Spring Boot Starter Parent?

First and foremost, Spring Boot Starter The parent pom defines spring-boot-dependencies. It inherits spring-boot-dependencies’ dependency management. Details in the next section.

Default java version is 1.6. A project can override this by specifying a property ` 17

` in the project pom. A few other settings related to encoding and source, target version are also set in the parent pom.

Spring Boot Starter Parent specifies the default configuration for a host of plugins including maven-compiler-plugin , maven-failsafe-plugin , maven-jar-plugin , maven-war-plugin and more .

What does Spring Boot Starter Parent inherit from spring-boot-dependencies?

Spring Boot Dependencies defines the Spring Boot project’s default dependency management. If we wish to utilise a new version of a certain dependency, we may do so by adding a new property to the project pom. The following extract demonstrates some of the essential dependencies controlled by the Spring Boot Dependencies parent pom. Spring Boot Starter Parent inherits all of these properties from spring-boot-dependencies.

Spring boot starter parent что это

Spring Boot Starter Parent is a starter project that provides the default configuration for spring-based applications. It is added as a parent in the pom.xml file. The spring-boot-starter-parent defines spring-boot-dependencies as its parent. The spring-boot-starter-parent inherits dependency management from spring-boot-dependencies. Every Spring Boot release provides a list of dependencies and the latest versions it supports. The dependency management feature of the starter parent allows the common dependencies to omit the <version> tag in the pom.xml file. If a dependency requires a specific version other than the version configured by the starter parent, that can be added using the <version> tag. The following are the features of the starter parent project:

  • The dependency management feature manages the versions of common dependencies.
  • Provide the default compiler level as Java 1.8 and UTF-8 source encoding.
  • Provides a default configuration for Maven plugins such as maven-surefire-plugin, maven-jar-plugin, and maven-failsafe-plugin.
  • Executes a repackage goal with a repackage execution id.
  • Resource filtering and configuring profile-specific files.

The parent of spring-boot-starter-parent looks like the following

The following code has to be added in the pom.xml to use spring-boot-starter-parent as a parent project.

Managing dependencies

Any spring boot starter can be included under the dependencies section. If we omit the version for a particular starter, Maven will download the jar files based on the version number defined in the parent section. For example, if we require a data access layer, then we should add spring-data-jpa dependency starter in the pom.xml file.

Dependency Management Tag

If you require a different version of dependency provided by the spring-boot-starter-parent, we can add a particular version inside the <version></version> tag and include the dependency and its version inside the dependencyManagement section.

Properties

We know that spring-boot-starter-parent configures the java compiler version, Maven plugins version, and Dependencies version using the properties defined inside it. We can override those property values inside the pom.xml file under the properties section. Suppose our project requires a different version of the sl4j library and a different java version.

Using Spring Boot Without a Starter Parent

If we want to inherit from the custom parent POM or define all the Maven configurations manually, we don’t inherit from the spring-boot-starter-parent pom. However, we can still benefit from the dependency management feature(not the plugin management) provided by spring-boot-dependencies, by including the dependency inside the dependencyMangement section as an import scope.

Note: To override the properties of individual dependencies, we need to add those dependencies prior to the addition of spring-boot-dependencies.

Java Blog

При использовании Spring Boot настоятельно рекомендуется выбрать систему сборки, которая поддерживает управление зависимостями и может использовать артефакты, опубликованные в репозитории «Maven Central». Рекомендуется выбрать Maven или Gradle. Можно заставить Spring Boot работать с другими системами сборки (например, Ant), но они не особенно хорошо поддерживаются.

Управление зависимостями

Каждый релиз Spring Boot предоставляет курируемый список зависимостей, который он поддерживает. На практике вам не нужно предоставлять версию для какой-либо из этих зависимостей в конфигурации сборки, поскольку Spring Boot управляет этим для вас. При обновлении самого Spring Boot эти зависимости также обновляются согласованным образом.

Вы по-прежнему можете указать версию и переопределить рекомендации Spring Boot, если это необходимо.

Курируемый список содержит все модули Spring, которые вы можете использовать с Spring Boot, а также улучшенный список сторонних библиотек. Список доступен в виде стандартных ведомостей материалов (spring-boot-dependencies), которые можно использовать как с Maven, так и с Gradle.

Каждый выпуск Spring Boot связан с базовой версией Spring Framework. Настоятельно рекомендуется не указывать его версию.

Maven

Пользователи Maven могут наследовать от проекта spring-boot-starter-parent для получения разумных значений по умолчанию. parent проект предоставляет следующие возможности:

  • Java 1.8 как уровень компилятора по умолчанию.
  • Кодировка UTF-8 источника.
  • Раздел управления зависимостями, унаследованный от spring-boot-dependencies pom, который управляет версиями общих зависимостей. Это управление зависимостями позволяет вам опустить теги <version> для этих зависимостей при использовании в вашем pom.
  • Выполнение цели repackage с идентификатором выполнения repackage.
  • Разумная фильтрация ресурсов.
  • Разумная конфигурация плагина (exec plugin, Git commit ID и shade).
  • Разумная фильтрация ресурсов для application.properties и application.yml, включая специфичные для профиля файлы (например, application-dev.properties и application-dev.yml)

Обратите внимание, что, поскольку файлы application.properties и application.yml принимают заполнители в стиле Spring ($<…>), фильтрация Maven изменяется на использование @..@ заполнителей. (Вы можете переопределить это, установив свойство Maven с именем resource.delimiter.)

Наследование parent стартера

Чтобы настроить ваш проект для наследования от spring-boot-starter-parent, установите parent следующим образом:

Вы должны указать только номер версии Spring Boot для этой зависимости. Если вы импортируете дополнительные стартеры, вы можете спокойно пропустить номер версии.

С помощью этой настройки вы также можете переопределить отдельные зависимости, переопределив свойство в вашем собственном проекте. Например, чтобы перейти на другой релиз Spring Data, вы должны добавить следующее в ваш pom.xml:

Использование Spring Boot без parent POM

Не всем нравится наследование от POM spring-boot-starter-parent. У вас может быть собственный корпоративный стандартный parent, который вам нужно использовать, или вы можете явно объявить всю свою конфигурацию Maven.

Если вы не хотите использовать spring-boot-starter-parent, вы все равно можете сохранить преимущества управления зависимостями (но не управления плагинами), используя зависимость scope=import следующим образом:

Предыдущий пример настройки не позволяет переопределять отдельные зависимости с помощью свойства, как описано выше. Чтобы достичь того же результата, вам нужно добавить запись в dependencyManagement вашего проекта перед записью spring-boot-dependencies. Например, чтобы перейти на другой релиз Spring Data, вы можете добавить следующий элемент в ваш файл pom.xml:

Использование плагина Spring Boot Maven

Spring Boot включает в себя плагин Maven, который может упаковать проект в виде исполняемого файла jar. Добавьте плагин в раздел <plugins>, если вы хотите его использовать, как показано в следующем примере:

Читать:
Как установить гугл хром на компьютер бесплатно

Если вы используете Spring Boot parent pom starter, вам нужно добавить только плагин. Нет необходимости настраивать его, если вы не хотите изменять параметры, определенные в parent элементе.

Введение в Spring Boot: создание простого REST API на Java

Из-за громоздкой конфигурации зависимостей настройка Spring для корпоративных приложений превратилась в весьма утомительное и подверженное ошибкам занятие. Особенно это относится к приложениям, которые используют также несколько сторонних библиотек

Каждый раз, создавая очередное корпоративное Java-приложение на основе Spring, вам необходимо повторять одни и те же рутинные шаги по его настройке:

  • В зависимости от типа создаваемого приложения (Spring MVC, Spring JDBC, Spring ORM и т.д.) импортировать необходимые Spring-модули
  • Импортировать библиотеку web-контейнеров (в случае web-приложений)
  • Импортировать необходимые сторонние библиотеки (например, Hibernate, Jackson), при этом вы должны искать версии, совместимые с указанной версией Spring
  • Конфигурировать компоненты DAO, такие, как: источники данных, управление транзакциями и т.д.
  • Конфигурировать компоненты web-слоя, такие, как: диспетчер ресурсов, view resolver
  • Определить класс, который загрузит все необходимые конфигурации

1. Представляем Spring Boot

Авторы Spring решили предоставить разработчикам некоторые утилиты, которые автоматизируют процедуру настройки и ускоряют процесс создания и развертывания Spring-приложений, под общим названием Spring Boot

Spring Boot — это полезный проект, целью которого является упрощение создания приложений на основе Spring. Он позволяет наиболее простым способом создать web-приложение, требуя от разработчиков минимум усилий по его настройке и написанию кода

2. Особенности Spring Boot

Spring Boot обладает большим функционалом, но его наиболее значимыми особенностями являются: управление зависимостями, автоматическая конфигурация и встроенные контейнеры сервлетов

2.1. Простота управления зависимостями

Чтобы ускорить процесс управления зависимостями, Spring Boot неявно упаковывает необходимые сторонние зависимости для каждого типа приложения на основе Spring и предоставляет их разработчику посредством так называемых starter-пакетов (spring-boot-starter-web, spring-boot-starter-data-jpa и т.д.)

Starter-пакеты представляют собой набор удобных дескрипторов зависимостей, которые можно включить в свое приложение. Это позволит получить универсальное решение для всех, связанных со Spring технологий, избавляя программиста от лишнего поиска примеров кода и загрузки из них требуемых дескрипторов зависимостей (пример таких дескрипторов и стартовых пакетов будет показан ниже)

Например, если вы хотите начать использовать Spring Data JPA для доступа к базе данных, просто включите в свой проект зависимость spring-boot-starter-data-jpa и все будет готово (вам не придется искать совместимые драйверы баз данных и библиотеки Hibernate)

Если вы хотите создать Spring web-приложение, просто добавьте зависимость spring-boot-starter-web, которая подтянет в проект все библиотеки, необходимые для разработки Spring MVC-приложений, таких как spring-webmvc, jackson-json, validation-api и Tomcat

Другими словами, Spring Boot собирает все общие зависимости и определяет их в одном месте, что позволяет разработчикам просто использовать их, вместо того, чтобы изобретать колесо каждый раз, когда они создают новое приложение

Следовательно, при использовании Spring Boot, файл pom.xml содержит намного меньше строк, чем при использовании его в Spring-приложениях

Обратитесь к документации, чтобы ознакомиться со всеми Spring Boot starter-пакетами

2.2. Автоматическая конфигурация

Второй превосходной возможностью Spring Boot является автоматическая конфигурация приложения

После выбора подходящего starter-пакета, Spring Boot попытается автоматически настроить Spring-приложение на основе добавленных вами jar-зависимостей

Например, если вы добавите Spring-boot-starter-web, Spring Boot автоматически сконфигурирует такие зарегистрированные бины, как DispatcherServlet, ResourceHandlers, MessageSource

Если вы используете spring-boot-starter-jdbc, Spring Boot автоматически регистрирует бины DataSource, EntityManagerFactory, TransactionManager и считывает информацию для подключения к базе данных из файла application.properties

Если вы не собираетесь использовать базу данных, и не предоставляете никаких подробных сведений о подключении в ручном режиме, Spring Boot автоматически настроит базу в памяти, без какой-либо дополнительной конфигурации с вашей стороны (при наличии H2 или HSQL библиотек)

Автоматическая конфигурация может быть полностью переопределена в любой момент с помощью пользовательских настроек

2.3. Встроенная поддержка сервера приложений — контейнера сервлетов

Каждое Spring Boot web-приложение включает встроенный web-сервер. Посмотрите на список контейнеров сервлетов, которые поддерживаются «из коробки»

Разработчикам теперь не надо беспокоиться о настройке контейнера сервлетов и развертывании приложения на нем. Теперь приложение может запускаться само, как исполняемый jar-файл с использованием встроенного сервера

Если вам нужно использовать отдельный HTTP-сервер, для этого достаточно исключить зависимости по умолчанию. Spring Boot предоставляет отдельные starter-пакеты для разных HTTP-серверов

Создание автономных web-приложений со встроенными серверами не только удобно для разработки, но и является допустимым решением для приложений корпоративного уровня и становится все более полезно в мире микросервисов. Возможность быстро упаковать весь сервис (например, аутентификацию пользователя) в автономном и полностью развертываемом артефакте, который также предоставляет API — делает установку и развертывание приложения значительно проще

3. Требования к установке Spring Boot

Для настройки и запуска Spring Boot приложений требуется следующее:

  • Java 8+
  • Apache Maven 3.x

4. Создание Spring Boot приложения

Теперь давайте перейдем к практике и реализуем очень простой REST API для приема платежей, используя возможности Spring Boot

4.1. Создание web-проекта с использованием Maven

Создайте Maven-проект в используемой вами IDE, назвав его SpringBootRestService

Обязательно используйте версию Java 8+, поскольку Spring Boot не работает с более ранними версиями

4.2. Конфигурация pom.xml

Вторым шагом необходимо настроить Spring Boot в файле pom.xml

Все приложения Spring Boot конфигурируются от spring-boot-starter-parent, поэтому перед дальнейшим определением зависимостей, добавьте starter-parent следующим образом:

Т.к. мы создаем REST API, то необходимо в качестве зависимости использовать spring-boot-starter-web, которая неявно определяет все остальные зависимости, такие как spring-core, spring-web, spring-webmvc, servlet api, и библиотеку jackson-databind, поэтому просто добавьте в pom.xml следующее:

Теперь следующие jar-библиотеки автоматически импортируются в ваш проект:

image

Следующий шаг — добавляем Spring Boot плагин:

Последний шаг — сделать так, чтобы Maven генерировал исполняемый jar-файл при сборке:

Ниже приведен полный файл pom.xml:

Как видите, используя одну зависимость, мы можем создать полностью функциональное web-приложение

4.3. Создание ресурсов REST

Теперь мы собираемся создать контроллер платежей вместе с POJO-классами для запросов и ответов

Напишем класс запроса платежа:

А также класс, обрабатывающий базовый ответ, возвращаемый нашим сервисом:

А теперь создадим контроллер:

4.4. Создание основного класса приложения

Этот последний шаг заключается в создании класса конфигурации и запуска приложения. Spring Boot поддерживает новую аннотацию @SpringBootApplication, которая эквивалентна использованию @Configuration, @EnableAutoConfiguration и @ComponentScan с их атрибутами по умолчанию

Таким образом, вам просто нужно создать класс, аннотированный с помощью @SpringBootApplication, а Spring Boot включит автоматическую настройку и отсканирует ваши ресурсы в текущем пакете:

5. Развертывание приложения Spring Boot

Теперь давайте воспользуемся третьей замечательной особенностью Spring Boot — это встроенный сервер. Все, что нам нужно сделать — это создать исполняемый jar-файл с помощью Maven и запустить его, как обычное автономное приложение:

  • Войдите в режим командной строки (команда cmd), перейдите в папку с pom.xml и введите команду mvn clean package
  • Maven cгенерирует исполняемый jar-файл с именем SpringBootRestService-1.0.jar
  • Перейдите в папку cd target
  • Затем запустите jar-файл: java -jar SpringBootRestService-1.0.jar
  • Перейдите в браузере по адресу http://localhost:8080/payment

Наш REST API запущен и готов обслуживать запросы через порт 8080 (по умолчанию)

В этой статье мы рассмотрели возможности Spring Boot и создали полностью рабочий пример с использованием встроенного сервера

В переводе обновили информацию:
  • Spring-boot-starter-parent изменили версию с 1.5.8.RELEASE на 2.1.1.RELEASE и соответственно был обновлен список библиотек, которые подтягивает Maven
  • Убрали объявления репозиториев Spring, зависимости подтягиваются из центрального репозитория
  • В классе BaseResponse поля сделали final, добавили конструктор и убрали сеттеры
  • В контроллере PaymentController ввели метод showStatus() с @GetMapping для тестирования приложения в браузере
  • Заменили @RequestMapping в методах на @GetMapping/@PostMapping
  • Также были внесены правки по развертыванию приложения с командной строки

UPDATE:

Как заметил Lure_of_Chaos, теперь уже все можно сделать автоматически через SPRING INITIALIZR. Причем не выходя из любимой JetBrains IntelliJ IDEA.

Похожие статьи