Якщо ти лише берешся до роботи зі Spring Boot або "Spring" загалом, почни з ознайомлення з цим розділом. Він дасть відповіді на основні питання "що?", "як?" і навіщо?". Розділ містить вступ до Spring Boot разом з інструкціями з установки. Потім ми проведемо тебе через створення першої програми в Spring Boot, описуючи по ходу деякі основні принципи.

Вступ до Spring Boot

Spring Boot допомагає створювати автономні програми на базі Spring, які можна потім виконувати. Ми дотримуємося суб'єктивного погляду на платформу Spring та сторонні бібліотеки, щоб ти міг розпочати роботу, доклавши мінімум зусиль. Більшість програм на Spring Boot не потребують детального конфігурування Spring.

Ти можеш використовувати Spring Boot для створення Java-додатків, які можуть бути запущені за допомогою команди java-jar або більш традиційних методів розгортань через war-файли Ми також надаємо інструментальний засіб командного рядка, який запускає "скрипти Spring".

Нашими основними цілями є:

  • Забезпечити радикально швидший та широко доступний досвід початкової роботи для будь-яких розробок на Spring.

  • Пропонувати власну думку з самого початку, але поступатися, якщо вимоги починають розходитися зі стандартними.

  • Надавати ряд нефункціональних можливостей, які є спільними для великих класів проектів (таких як вбудовані сервери, безпека, метрики, перевірка працездатності та винесена у зовнішній файл конфігурація).

  • Абсолютна відсутність генерації коду та вимог до XML-конфігурації.

Розробка вашої першої програми засобами Spring Boot

У цьому розділі описується розробка невеликого веб-додатку "Hello World! ", який демонструє деякі ключові можливості Spring Boot. Для складання цього проекту ми використовуємо Maven, оскільки більшість IDE підтримують його.

Вебсайт spring.io містить безліч гайдів про "початок роботи", у яких використовується Spring Boot. Якщо тобі потрібно вирішити конкретну проблему, спочатку заглянь туди.

Ти можеш пропустити наведені нижче кроки, перейшовши за адресою start .spring.io і вибравши стартовий пакет для веб з пошуковика залежностей. При цьому буде створено нову структуру проєкту, щоб можна було відразу ж приступати до написання коду. Перш ніж ми приступимо, відкрий термінал і виконай наступні команди, щоб переконатися, що у тебе встановлені дійсні версії Java і Maven:

$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
$ mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00)
Maven home: /usr/local/Cellar/maven/3.3.9/libexec
Java version: 1.8.0_102, vendor: Oracle Corporation
Цей зразок має бути створений у власному каталозі. Наступні інструкції припускають, що ти вже створив відповідний каталог і що він є твоїм поточним каталогом.

Создание POM

Почати необхідно зі створення файла pom.xml для Maven. pom.xml — це набір правил, які використовуються для складання проєкту. Відкрий свій улюблений текстовий редактор і додай наступне:


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>myproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
    </parent>
    <!-- Додаткові рядки будуть додані тут... -->
</project>

Попередній листинг повинен дозволити вам отримати робочий білд. Ви можете перевірити його, запустивши mvn package (поки що можна ігнорувати попередження "jar буде порожнім – відсутній вміст, позначений для включення!").

На цьому етапі можна імпортувати проект в IDE (більшість сучасних Java IDE передбачають вбудовану підтримку Maven). Для спрощення в цьому прикладі ми продовжуємо використовувати звичайний текстовий редактор.

Додавання залежностей з classpath

Spring Boot передбачає низку "стартових пакетів", які дозволяють додавати jar-файли в classpath. Наші програми для димових (на загальну працездатність) тестів (smoke tests) використовують spring-boot-starter-parent у parent секції POM-моделі. spring-boot-starter-parent — це спеціальний стартовий пакет, який передбачає параметри Maven, що використовуються за замовчуванням. Він також передбачає секцію управління залежностями, щоб можна було опускати теги version для "вибраних" залежностей.

Інші "стартові пакети" передбачають залежності, які, швидше за все, знадобляться розробки додатків певного типу. Оскільки ми розробляємо вебдодаток, то додаємо залежність від spring-boot-starter-web. Перед цим можна подивитися, що у нас є наразі, виконавши наступну команду:

$ mvn dependency:tree
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

Команда mvn dependency:tree виводить деревоподібне уявлення залежностей проєкту. Як можна помітити, spring-boot-starter-parent сам по собі не передбачає жодних залежностей. Щоб додати необхідні залежності, відредагуйте свій pom.xml і додайте залежність spring-boot-starter-web відразу під parent секцією:


<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

Якщо ти знову запустиш mvn dependency:tree, то побачиш, що тепер існує кілька додаткових залежностей, включно з вебсервером Tomcat і самим Spring Boot.

Написання коду

Щоб завершити програму, нам необхідно створити один Java-файл. За замовчуванням Maven компілює вихідники з каталогу src/main/java, тому необхідно створити цю структуру каталогу, а потім додати файл з ім'ям src/main/java/MyApplication.java, який міститиме наступний код:

Java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@EnableAutoConfiguration
public class MyApplication {
    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
Kotlin

import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.boot.runApplication
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RestController
@EnableAutoConfiguration
class MyApplication {
    @RequestMapping("/")
    fun home() = "Hello World!"
}
fun main(args: Array<String>) {
    runApplication<MyApplication>(*args)
}

Хоча коду не так вже й багато, але відбувається дуже багато. Розглянемо важливі елементи в наступних кількох розділах.

Інформації @RestController та @RequestMapping

Перша анотація для нашого класу MyApplication — це @RestController. Вона відома як стереотипнаанотація. Ця анотація є підказкою для людей, які читають код, і для Spring, що клас відіграє певну роль. В цьому випадку наш клас є @Controller для веб, тому Spring враховує його при обробці вхідних вебзапитів.

Анотація @RequestMapping передає інформацію про "маршрутизації". Вона повідомляє Spring, що будь-який HTTP-запит за допомогою / слід відображати на метод home. Анотація @RestController повідомляє Spring, що необхідно вивести результуючий рядок назад безпосередньо викликаючою програмою.

та @RequestMapping є анотаціями Spring MVC (вони не характерні для Spring Boot).

Анотація @EnableAutoConfiguration

Друга анотація на рівні класу — це @EnableAutoConfiguration. Вона повідомляє Spring Boot, що потрібно "вгадати", як потрібно сконфігурувати Spring, ґрунтуючись на доданих вами jar-залежностях. Оскільки spring-boot-starter-web додав Tomcat і Spring MVC, засіб автоконфігурування передбачає, що ти розробляєш вебдодаток, і налаштовує Spring відповідним чином.

Стартові пакети та автоконфігурація

Автоконфігурація призначена для роботи зі "стартовими пакетами", але ці два поняття не пов'язані безпосередньо. Ти можеш вільно вибирати jar-залежності поза стартовими пакетами. Spring Boot, як і раніше, буде робити все можливе для автоконфігурування твоєї програми.

Метод "main"

Заключною частиною нашої програми є метод main . Це стандартний метод, який відповідає стандарту Java для точки входу до програми. Наш метод main делегує повноваження класу SpringApplication для Spring Boot, викликаючи run. SpringApplication здійснює початкове завантаження нашої програми, запускаючи Spring, який, у свою чергу, запускає автоматично налаштований вебсервер Tomcat. Нам необхідно передати MyApplication.class як аргумент у метод run, щоб повідомити SpringApplication, який компонент Spring є первинним. Масив args також передається для відкриття будь-яких аргументів командного рядка.

Виконуємо приклад

На цьому етапі програма вже має працювати. Оскільки ви використовували POM-модель з spring-boot-starter-parent, у тебе є мета run, яку можна використовувати для запуску програми. Вводимо mvn spring-boot:run з кореневого каталогу проекту, щоб запустити програму. Ти маєш побачити виведення типу такого:

$ mvn spring-boot:run
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.7.5)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 2.222 seconds (JVM running for 6.514)

Якщо ти відкриєш веббраузер на localhost:8080, то побачиш наступне повідомлення:

Hello World!

Щоб поетапно вийти з програми, натисни ctrl-c.

Створення виконуваного jar-файлу

Ми завершуємо наш приклад створенням повністю самодостатнього виконуваного jar-файлу, який можна виконувати у виробничому оточенні. Виконувані jar-файли (іноді звані "fat (товстими) jar-файлами") — це архіви, що містять скомпільовані класи разом з усіма jar-залежностями, які необхідні коду для виконання.

Виконані jar-файли та Java

Java не передбачає стандартного способу завантаження вкладених jar-файлів (jar-файлів, які самі містяться усередині jar-файлів). Це може стати проблемою, якщо необхідно поширювати самодостатню програму.

Щоб вирішити цю проблему, багато розробників використовують "uber (убер)" jar-файли. У uber jar-файл всі класи з усіх залежностей програми упаковані в один архів. Проблема такого підходу полягає в тому, що важко зрозуміти, які саме бібліотеки знаходяться в додатку. Також може виникнути проблема, якщо те саме ім'я файлу використовується (але з різним вмістом) у декількох jar-файлах.

Spring Boot використовує інший підхід і дозволяє вкласти jar-файли безпосередньо.

Щоб створити виконуваний jar-файл, необхідно додати spring-boot-maven-plugin до нашого pom.xml. Для цього вставляємо наступні рядки нижче секції dependencies:


<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
POM-модель spring-boot-starter-parent включає конфігурацію <executions> для прив'язки мети repackage. Якщо ти не використовуєш батьківську POM-модель, тобі необхідно оголосити цю конфігурацію самостійно. Таким чином:

$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.7.5:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

Якщо ти подивишся в каталог target, маєш побачити там myproject-0.0.1-SNAPSHOT.jar. Розмір файлу має становити близько 10 МБ. Якщо хочеш заглянути всередину, можна використовувати jar tvf, як показано нижче:

$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar

У target каталозі також має бути присутнім набагато менший файл з ім'ям myproject-0.0.1-SNAPSHOT.jar.original. Це оригінальний jar-файл, який Maven створив до того, як він був перепакований Spring Boot.

Щоб запустити цю програму, використовуй команду java -jar, як показано нижче:

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.7.5)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 2.536 seconds (JVM running for 2.864)

Як і раніше, щоб вийти з програми, натисни ctrl-c.