У цьому розділі більш детально розповідається про те, як слід використовувати 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-файлу. Ми радимо слідувати рекомендованим 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
буде оголошений таким чином:
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);
}
}
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class MyApplication
fun main(args: Array<String>) {
runApplication<MyApplication>(*args)
}
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ