У цьому розділі більш детально розповідається про те, як слід використовувати Spring Boot. У ньому розглядаються такі теми, як системи збирання, автоконфігурація та виконання додатків. Ми також розглянемо деякі найвідповідальніші методи роботи зі Spring Boot. Хоча в Spring Boot немає нічого особливого (це просто ще одна бібліотека, яку можна використовувати), існує кілька рекомендацій, дотримання яких трохи спростить процес розробки.

Системи складання

Рекомендуємо обрати таку систему складання, яка підтримує керування залежностями і яка може споживати артефакти, опубліковані в репозиторії Maven Central. Ми рекомендуємо обрати Maven чи Gradle. Можна змусити Spring Boot працювати з іншими системами збирання (наприклад, Ant), але вони не дуже добре підтримуються.

Керування залежностями

Кожен випуск 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 як вбудований контейнер сервлетів .

Список додаткових стартових пакетів, внесений спільнотою, див. у модулі spring-boot-starters на GitHub.

Структурування коду

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

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

Якщо клас не містить оголошення package, він вважається таким, що знаходиться в "пакеті за замовчуванням". Використання "за замовчуванням" зазвичай не рекомендується і його слід уникати. Це може призвести до конкретних проблем для програм Spring Boot, які використовують анотації @ComponentScan, @ConfigurationPropertiesScan, @EntityScan або @SpringBootApplication, оскільки зчитується кожний клас з кожного jar-файлу. Ми радимо слідувати рекомендованим Java-угодам про іменування пакетів і використовувати зворотне доменне ім'я (наприклад, com.example.project).

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

Зазвичай рекомендується розміщувати основний клас програми в кореневому пакеті над іншими класами. Анотація @SpringBootApplication найчастіше поміщається до основного класу, і вона неявно визначає базовий "пошуковий пакет" для певних елементів. Наприклад, якщо ти пишеш JPA-додаток, пакет класу, позначеного анотацією @SpringBootApplication, використовується для пошуку елементів з анотацією @Entity. Використання кореневого пакету також дозволяє застосовувати сканування компонентів виключно до твого проєкту. @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)
}