В этом разделе более подробно рассказывается о том, как следует использовать 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.
настоятельно
рекомендуем не указывать его версию.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 в рамках группы org.springframework.boot
:
Имя | Описание |
---|---|
Основной стартовый пакет, включая поддержку автоконфигурации, журналирования и YAML |
|
Стартовый пакет для обмена сообщениями JMS с использованием Apache ActiveMQ |
|
Стартовый пакет для использования Spring AMQP и Rabbit MQ |
|
Стартовый пакет для аспектно-ориентированного программирования при помощи Spring AOP и AspectJ |
|
Стартовый пакет для обмена сообщениями JMS с использованием Apache Artemis |
|
Стартовый пакет для использования Spring Batch |
|
Стартовый пакет для использования средств поддержки кэширования в Spring Framework |
|
Стартовый пакет для использования распределенной базы данных Cassandra и Spring Data Cassandra |
|
Стартовый пакет для использования распределенной базы данных Cassandra и Spring Data Cassandra Reactive |
|
Стартовый пакет для использования документно-ориентированной базы данных Couchbase и Spring Data Couchbase |
|
Стартовый пакет для использования документо-ориентированной базы данных Couchbase и Spring Data Couchbase Reactive |
|
Стартовый пакет для использования поисково-аналитического механизма Elasticsearch и Spring Data Elasticsearch |
|
Стартовый пакет для использования Spring Data JDBC |
|
Стартовый пакет для использования Spring Data JPA с Hibernate |
|
Стартовый пакет для использования Spring Data LDAP |
|
Стартовый пакет для использования документно-ориентированной базы данных MongoDB и Spring Data MongoDB |
|
Стартовый пакет для использования документо-ориентированной базы данных MongoDB и Spring Data MongoDB Reactive |
|
Стартовый пакет для использования базы данных графов Neo4j и Spring Data Neo4j |
|
Стартовый пакет для использования Spring Data R2DBC |
|
Стартовый пакет для использования хранилища данных ключей и значений Redis через Spring Data Redis и клиент Lettuce |
|
Стартовый пакет для использования хранилища данных ключей и значений Redis через реактивное хранилище Spring Data Redis и клиент Lettuce |
|
Стартовый пакет для открытия репозиториев Spring Data поверх REST с помощью Spring Data REST |
|
Стартовый пакет для создания веб-приложений MVC с использованием представлений FreeMarker |
|
Стартовый пакет для создания GraphQL-приложений с помощью Spring GraphQL |
|
Стартовый пакет для создания веб-приложений MVC с использованием представлений Шаблоны Groovy |
|
Стартовый пакет для построения RESTful веб-приложения на основе гипермедиа через Spring MVC и Spring HATEOAS |
|
Стартовый пакет для использования Spring Integration |
|
Стартовый пакет для использования JDBC с пулом соединений HikariCP |
|
Стартовый пакет для создания RESTful веб-приложений с использованием JAX-RS и Jersey. |
|
Стартовый пакет для использования jOOQ для обеспечения доступа к базам данных SQL с помощью JDBC. |
|
Стартовый пакет для чтения и записи json |
|
Стартовый пакет для JTA-транзакций с использованием Atomikos |
|
Стартовый пакет для использования Java Mail и средств поддержки отправки электронной почты в Spring Framework |
|
Стартовый пакет для создания веб-приложений с использованием представлений Mustache |
|
Стартовый пакет для использования функций клиента Spring Security OAuth2/OpenID Connect |
|
Стартовый пакет для использования функций сервера ресурсов OAuth2 в Spring Security |
|
Стартовый пакет для использования планировщика Quartz |
|
Стартовый пакет для создания клиентов и серверов RSocket |
|
Стартовый пакет для использования Spring Security |
|
Стартовый пакет для тестирования приложений Spring Boot с помощью библиотек, включая JUnit Jupiter, Hamcrest и Mockito |
|
Стартовый пакет для создания веб-приложений MVC с использованием представлений Thymeleaf |
|
Стартовый пакет для использования Java Bean Validation с Hibernate Validator |
|
Стартовый пакет для создания веб-приложений, в том числе RESTful, с использованием Spring MVC. Использует Tomcat в качестве встроенного контейнера по умолчанию |
|
Стартовый пакет для использования Spring Web Services |
|
Стартовый пакет для создания приложений WebFlux с использованием поддержки Reactive Web в Spring Framework |
|
Стартовый пакет для создания WebSocket-приложений с использованием средств поддержки WebSocket в Spring Framework |
В дополнение к стартовым пакетам для приложений, следующие стартовые пакеты можно использовать для добавления функционала для подготовки к производственной эксплуатации:
Имя | Описание |
---|---|
Стартовый пакет для использования Actuator из Spring Boot, который предусматривает функции для производственного развертывания, помогающие отслеживать и управлять приложением |
Наконец, Spring Boot также содержит следующие стартовые пакеты, которые можно использовать, если требуется исключить или поменять местами определенные технические аспекты:
Имя | Описание |
---|---|
Стартовый пакет для использования Jetty в качестве встроенного контейнера сервлетов. |
|
Стартовый пакет для использования Log4j2 в целях журналирования. |
|
Стартовый пакет для журналирования с помощью Logback. Стартовый пакет для журналирования по умолчанию |
|
Стартовый пакет для использования Reactor Netty в качестве встроенного реактивного HTTP-сервера. |
|
Стартовый пакет для использования Tomcat в качестве встроенного контейнера сервлетов. Стартовый пакет для контейнера сервлетов по умолчанию, используемый |
|
Стартовый пакет для использования Undertow в качестве встроенного контейнера сервлетов. |
spring-boot-starters
на GitHub.Структурирование кода
Для работы в Spring Boot не требуется какой-либо определенной структуры кода. Тем не менее, есть некоторые наиболее оптимальные полезные методы.
Использование пакета "по умолчанию"
Если класс не содержит объявления package
, он считается находящимся в "пакете по умолчанию". Использование "пакета по умолчанию" обычно не рекомендуется и его следует избегать. Это может привести к конкретным проблемам для приложений Spring Boot, которые используют аннотации @ComponentScan
, @ConfigurationPropertiesScan
, @EntityScan
или @SpringBootApplication
, поскольку считывается каждый класс из каждого jar-файла.
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
будет объявлен следующим образом:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
@SpringBootApplication
class MyApplication
fun main(args: Array<String>) {
runApplication<MyApplication>(*args)
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ