В этом разделе более подробно рассказывается о том, как следует использовать Spring Boot. В нем рассматриваются такие темы, как системы сборки, автоконфигурация и выполнение приложений. Мы также рассмотрим некоторые наиболее отпимальные методы работы со Spring Boot. Хотя в 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

Чтобы узнать об использовании Spring Boot с Maven, обратитесь к документации по плагину Spring Boot для Maven:

Gradle

Чтобы узнать об использовании Spring Boot с Gradle, обратитесь к документации по плагину Spring Boot для Gradle:

Ant

Можно собрать проект на Spring Boot с помощью Apache Ant+Ivy. Также имеется "AntLib"-модуль spring-boot-antlib, который призван помочь Ant создавать исполняемые jar-файлы.

Для объявления зависимостей типичный файл ivy.xml выглядит примерно так, как показано в следующем примере:

<ivy-module version="2.0">
    <info organisation="org.springframework.boot" module="spring-boot-sample-ant" />
    <configurations>
        <conf name="compile" description="everything needed to compile this module" />
        <conf name="runtime" extends="compile" description="everything needed to run this module" />
    </configurations>
    <dependencies>
        <dependency org="org.springframework.boot" name="spring-boot-starter"
            rev="${spring-boot.version}" conf="compile" />
    </dependencies>
</ivy-module>

Типичный build.xml выглядит следующим образом:

<project
    xmlns:ivy="antlib:org.apache.ivy.ant"
    xmlns:spring-boot="antlib:org.springframework.boot.ant"
    name="myapp" default="build">
    <property name="spring-boot.version" value="2.7.5" />
    <target name="resolve" description="--> retrieve dependencies with ivy">
        <ivy:retrieve pattern="lib/[conf]/[artifact]-[type]-[revision].[ext]" />
    </target>
    <target name="classpaths" depends="resolve">
        <path id="compile.classpath">
            <fileset dir="lib/compile" includes="*.jar" />
        </path>
    </target>
    <target name="init" depends="classpaths">
        <mkdir dir="build/classes" />
    </target>
    <target name="compile" depends="init" description="compile">
        <javac srcdir="src/main/java" destdir="build/classes" classpathref="compile.classpath" />
    </target>
    <target name="build" depends="compile">
        <spring-boot:exejar destfile="build/myapp.jar" classes="build/classes">
            <spring-boot:lib>
                <fileset dir="lib/runtime" />
            </spring-boot:lib>
        </spring-boot:exejar>
    </target>
</project>

Стартовые пакеты

Стартовые пакеты – это набор удобных дескрипторов зависимостей, которые можно включать в свое приложение. Вы получаете универсальный механизм для всех необходимых вам содержащихся в Spring и связанных с ним технологий без необходимости искать примеры кода и копировать и вставлять кучу дескрипторов зависимостей. Например, если вы хотите начать использовать Spring и JPA для доступа к базе данных, включите в свой проект зависимость spring-boot-starter-data-jpa.

Стартовые пакеты содержат множество зависимостей, необходимых для быстрого запуска проекта с последовательным, совместимым набором управляемых переходных зависимостей.

Что значит имя?

Все официальные стартовые пакеты имеют одинаковые названия: spring-boot-starter-*, где * – это конкретный тип приложения. Эта структура именования призвана помочь, если нужно найти стартовый пакет. Интеграция Maven во многие IDE позволяет искать зависимости по имени. Например, если установлен соответствующий плагин для Eclipse или Spring Tools, можно нажать ctrl-space в редакторе POM-модели и ввести "spring-boot-starter" для получения полного списка.

Сторонние стартовые пакеты не должны начинаться со spring-boot, поскольку это имя зарезервировано для официальных артефактов Spring Boot. Скорее, сторонний стартовый пакет обычно начинается с названия проекта. Например, сторонний стартовый проект под названием thirdpartyproject обычно называется thirdpartyproject-spring-boot-starter.

Следующие стартовые пакеты для приложений предусматриваются Spring Boot в рамках группы org.springframework.boot:

Таблица 1. Стартовые пакеты для приложений в Spring Boot
Имя Описание

spring-boot-starter

Основной стартовый пакет, включая поддержку автоконфигурации, журналирования и YAML

spring-boot-starter-activemq

Стартовый пакет для обмена сообщениями JMS с использованием Apache ActiveMQ

spring-boot-starter-amqp

Стартовый пакет для использования Spring AMQP и Rabbit MQ

spring-boot-starter-aop

Стартовый пакет для аспектно-ориентированного программирования при помощи Spring AOP и AspectJ

spring-boot-starter-artemis

Стартовый пакет для обмена сообщениями JMS с использованием Apache Artemis

spring-boot-starter-batch

Стартовый пакет для использования Spring Batch

spring-boot-starter-cache

Стартовый пакет для использования средств поддержки кэширования в Spring Framework

spring-boot-starter-data-cassandra

Стартовый пакет для использования распределенной базы данных Cassandra и Spring Data Cassandra

spring-boot-starter-data-cassandra-reactive

Стартовый пакет для использования распределенной базы данных Cassandra и Spring Data Cassandra Reactive

spring-boot-starter-data-couchbase

Стартовый пакет для использования документно-ориентированной базы данных Couchbase и Spring Data Couchbase

spring-boot-starter-data-couchbase-reactive

Стартовый пакет для использования документо-ориентированной базы данных Couchbase и Spring Data Couchbase Reactive

spring-boot-starter-data-elasticsearch

Стартовый пакет для использования поисково-аналитического механизма Elasticsearch и Spring Data Elasticsearch

spring-boot-starter-data-jdbc

Стартовый пакет для использования Spring Data JDBC

spring-boot-starter-data-jpa

Стартовый пакет для использования Spring Data JPA с Hibernate

spring-boot-starter-data-ldap

Стартовый пакет для использования Spring Data LDAP

spring-boot-starter-data-mongodb

Стартовый пакет для использования документно-ориентированной базы данных MongoDB и Spring Data MongoDB

spring-boot-starter-data-mongodb-reactive

Стартовый пакет для использования документо-ориентированной базы данных MongoDB и Spring Data MongoDB Reactive

spring-boot-starter-data-neo4j

Стартовый пакет для использования базы данных графов Neo4j и Spring Data Neo4j

spring-boot-starter-data-r2dbc

Стартовый пакет для использования Spring Data R2DBC

spring-boot-starter-data-redis

Стартовый пакет для использования хранилища данных ключей и значений Redis через Spring Data Redis и клиент Lettuce

spring-boot-starter-data-redis-reactive

Стартовый пакет для использования хранилища данных ключей и значений Redis через реактивное хранилище Spring Data Redis и клиент Lettuce

spring-boot-starter-data-rest

Стартовый пакет для открытия репозиториев Spring Data поверх REST с помощью Spring Data REST

spring-boot-starter-freemarker

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

spring-boot-starter-graphql

Стартовый пакет для создания GraphQL-приложений с помощью Spring GraphQL

spring-boot-starter-groovy-templates

Стартовый пакет для создания веб-приложений MVC с использованием представлений Шаблоны Groovy

spring-boot-starter-hateoas

Стартовый пакет для построения RESTful веб-приложения на основе гипермедиа через Spring MVC и Spring HATEOAS

spring-boot-starter-integration

Стартовый пакет для использования Spring Integration

spring-boot-starter-jdbc

Стартовый пакет для использования JDBC с пулом соединений HikariCP

spring-boot-starter-jersey

Стартовый пакет для создания RESTful веб-приложений с использованием JAX-RS и Jersey.

spring-boot-starter-jooq

Стартовый пакет для использования jOOQ для обеспечения доступа к базам данных SQL с помощью JDBC.

spring-boot-starter-json

Стартовый пакет для чтения и записи json

spring-boot-starter-jta-atomikos

Стартовый пакет для JTA-транзакций с использованием Atomikos

spring-boot-starter-mail

Стартовый пакет для использования Java Mail и средств поддержки отправки электронной почты в Spring Framework

spring-boot-starter-mustache

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

spring-boot-starter-oauth2-client

Стартовый пакет для использования функций клиента Spring Security OAuth2/OpenID Connect

spring-boot-starter-oauth2-resource-server

Стартовый пакет для использования функций сервера ресурсов OAuth2 в Spring Security

spring-boot-starter-quartz

Стартовый пакет для использования планировщика Quartz

spring-boot-starter-rsocket

Стартовый пакет для создания клиентов и серверов RSocket

spring-boot-starter-security

Стартовый пакет для использования Spring Security

spring-boot-starter-test

Стартовый пакет для тестирования приложений Spring Boot с помощью библиотек, включая JUnit Jupiter, Hamcrest и Mockito

spring-boot-starter-thymeleaf

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

spring-boot-starter-validation

Стартовый пакет для использования Java Bean Validation с Hibernate Validator

spring-boot-starter-web

Стартовый пакет для создания веб-приложений, в том числе RESTful, с использованием Spring MVC. Использует Tomcat в качестве встроенного контейнера по умолчанию

spring-boot-starter-web-services

Стартовый пакет для использования Spring Web Services

spring-boot-starter-webflux

Стартовый пакет для создания приложений WebFlux с использованием поддержки Reactive Web в Spring Framework

spring-boot-starter-websocket

Стартовый пакет для создания WebSocket-приложений с использованием средств поддержки WebSocket в Spring Framework

В дополнение к стартовым пакетам для приложений, следующие стартовые пакеты можно использовать для добавления функционала для подготовки к производственной эксплуатации:

Таблица 2. Производственные стартовые пакеты Spring Boot
Имя Описание

spring-boot-starter-actuator

Стартовый пакет для использования Actuator из Spring Boot, который предусматривает функции для производственного развертывания, помогающие отслеживать и управлять приложением

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

Таблица 3. Технические стартовые пакеты Spring Boot
Имя Описание

spring-boot-starter-jetty

Стартовый пакет для использования Jetty в качестве встроенного контейнера сервлетов.

spring-boot-starter-log4j2

Стартовый пакет для использования Log4j2 в целях журналирования.

spring-boot-starter-logging

Стартовый пакет для журналирования с помощью Logback. Стартовый пакет для журналирования по умолчанию

spring-boot-starter-reactor-netty

Стартовый пакет для использования Reactor Netty в качестве встроенного реактивного HTTP-сервера.

spring-boot-starter-tomcat

Стартовый пакет для использования Tomcat в качестве встроенного контейнера сервлетов. Стартовый пакет для контейнера сервлетов по умолчанию, используемый spring-boot-starter-web

spring-boot-starter-undertow

Стартовый пакет для использования Undertow в качестве встроенного контейнера сервлетов.

Список дополнительных стартовых пакетов, внесенный сообществом, см. в файле README в модуле spring-boot-starters на GitHub.

Структурирование кода

Для работы в Spring Boot не требуется какой-либо определенной структуры кода. Тем не менее, есть некоторые наиболее оптимальные полезные методы.

Использование пакета "по умолчанию"

Если класс не содержит объявления package, он считается находящимся в "пакете по умолчанию". Использование "пакета по умолчанию" обычно не рекомендуется и его следует избегать. Это может привести к конкретным проблемам для приложений Spring Boot, которые используют аннотации @ComponentScan, @ConfigurationPropertiesScan, @EntityScan или @SpringBootApplication, поскольку считывается каждый класс из каждого jar-файла.

Мы рекомендуем следовать рекомендуемым Java-соглашениям об именовании пакетов и использовать обратное доменное имя (например, com.example.project).

Размещение основного класса приложения

Обычно рекомендуется размещать основной класс приложения в корневом пакете над другими классами. Аннотация @SpringBootApplication зачастую помещается в основной класс, и она неявно определяет базовый "поисковый пакет" для определенных элементов. Например, если вы пишете JPA-приложение, пакет класса, помеченного аннотацией @SpringBootApplication, используется для поиска элементов с аннотацией @Entity. Использование корневого пакета также позволяет применять сканирование компонентов исключительно к вашему проекту.

Если вы не хотите использовать аннотацию @SpringBootApplication, аннотации @EnableAutoConfiguration и @ComponentScan, которые импортирует пакет, определяют такую же логику работы, поэтому вместо этого вы можете использовать их.

В приведенном ниже списке показана типичная структура:

com
 +- example
     +- myapplication
         +- MyApplication.java
         |
         +- customer
         |   +- Customer.java
         |   +- CustomerController.java
         |   +- CustomerService.java
         |   +- CustomerRepository.java
         |
         +- order
             +- Order.java
             +- OrderController.java
             +- OrderService.java
             +- OrderRepository.java

В файле MyApplication.java метод main вместе с базовым @SpringBootApplication будет объявлен следующим образом:

Java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
Kotlin
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class MyApplication
fun main(args: Array<String>) {
    runApplication<MyApplication>(*args)
}