Если вы только приступаете к работе со 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 и выбрав стартовый паке для веб из поисковика зависимостей. При этом будет создана новая структура проекта, чтобы можно было сразу же приступать к написанию кода.p>
Прежде чем мы приступим, откройте терминал и выполните следующие команды, чтобы удостовериться, что у вас установлены действительные версии 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 будет пуст – отсутствует содержимое, помеченное для включения!").
Добавление зависимостей из 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
, который будет содержать следующий код:
@RestController
@EnableAutoConfiguration
public class MyApplication {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
@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, что необходимо вывести результирующую строку обратно непосредственно вызывающей программе.
@RestController
и @RequestMapping
являются аннотациями Spring MVC (они не характерны для Spring Boot).Аннотация @EnableAutoConfiguration
Вторая аннотация на уровне класса – это @EnableAutoConfiguration
. Эта аннотация сообщает Spring Boot, что необходимо "угадать", как нужно сконфигурировать Spring, основываясь на добавленных вами jar-зависимостях. Поскольку spring-boot-starter-web
добавил Tomcat и Spring MVC, средство автоконфигурирования предполагает, что вы разрабатываете веб-приложение, и настраивает Spring соответствующим образом.
Метод "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-файл, необходимо добавить spring-boot-maven-plugin
в наш pom.xml
. Для этого вставляем следующие строки чуть ниже секции dependencies
:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
spring-boot-starter-parent
включает конфигурацию <executions>
для привязки цели repackage
. Если вы не используете родительскую POM-модель, то вам необходимо объявить эту конфигурацию самостоятельно.Сохраняем pom.xml
и выполняем mvn package
из командной строки следующим образом:
$ 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
.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ