0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>5 июл 2023</li>
2
<ul><li>5 июл 2023</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Разбираемся в его отличиях от фреймворка Spring и пишем простой код.</p>
4
</ul><p>Разбираемся в его отличиях от фреймворка Spring и пишем простой код.</p>
5
<p>Иллюстрация: Wikimedia Commons / Spring / Colowgee для Skillbox Media</p>
5
<p>Иллюстрация: Wikimedia Commons / Spring / Colowgee для Skillbox Media</p>
6
<p>Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.</p>
6
<p>Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.</p>
7
<p>В мире Java-разработки Spring, пожалуй, - самый популярный фреймворк для создания корпоративных приложений. Но если открыть документацию, литературу или курсы по нему, то мы почти сразу столкнёмся со Spring Boot.</p>
7
<p>В мире Java-разработки Spring, пожалуй, - самый популярный фреймворк для создания корпоративных приложений. Но если открыть документацию, литературу или курсы по нему, то мы почти сразу столкнёмся со Spring Boot.</p>
8
<p>Давайте разберёмся, почему они всегда идут рука об руку, в чём их различия и чем так хорош Spring Boot. А напоследок напишем простой проект.</p>
8
<p>Давайте разберёмся, почему они всегда идут рука об руку, в чём их различия и чем так хорош Spring Boot. А напоследок напишем простой проект.</p>
9
<p><strong>Содержание</strong></p>
9
<p><strong>Содержание</strong></p>
10
<ul><li><a>Что такое Spring Boot и чем он отличается от Spring</a></li>
10
<ul><li><a>Что такое Spring Boot и чем он отличается от Spring</a></li>
11
<li><a>Быстрый старт</a></li>
11
<li><a>Быстрый старт</a></li>
12
<li><a>Преимущества Spring Boot в работе</a></li>
12
<li><a>Преимущества Spring Boot в работе</a></li>
13
<li><a>Запускаем Spring Boot</a></li>
13
<li><a>Запускаем Spring Boot</a></li>
14
<li><a>Создаём первое веб-приложение</a></li>
14
<li><a>Создаём первое веб-приложение</a></li>
15
<li><a>Что дальше?</a></li>
15
<li><a>Что дальше?</a></li>
16
</ul><p>Итак, Spring - это фреймворк для Java, на котором пишут веб-приложения и микросервисы. А Spring Boot - это расширение, которое упрощает и ускоряет работу со Spring. Оно представляет собой набор утилит, автоматизирующих настройки фреймворка.</p>
16
</ul><p>Итак, Spring - это фреймворк для Java, на котором пишут веб-приложения и микросервисы. А Spring Boot - это расширение, которое упрощает и ускоряет работу со Spring. Оно представляет собой набор утилит, автоматизирующих настройки фреймворка.</p>
17
<p>Spring Boot разработан для ускорения создания веб-приложений. Он отличается от своего "родителя" тем, что не требует сложной настройки и имеет ряд встроенных инструментов, упрощающих написание кода.</p>
17
<p>Spring Boot разработан для ускорения создания веб-приложений. Он отличается от своего "родителя" тем, что не требует сложной настройки и имеет ряд встроенных инструментов, упрощающих написание кода.</p>
18
<em>Изображение:</em><a><em>Know Your Meme</em></a><em>/ Skillbox Media</em><p>В отличие от базового фреймворка, он умеет:</p>
18
<em>Изображение:</em><a><em>Know Your Meme</em></a><em>/ Skillbox Media</em><p>В отличие от базового фреймворка, он умеет:</p>
19
<ul><li>упаковывать зависимости в стандартные starter-пакеты;</li>
19
<ul><li>упаковывать зависимости в стандартные starter-пакеты;</li>
20
<li>автоматически конфигурировать приложения с помощью jar-зависимостей;</li>
20
<li>автоматически конфигурировать приложения с помощью jar-зависимостей;</li>
21
<li>использовать JavaConfig, что позволяет отказаться от использования XML;</li>
21
<li>использовать JavaConfig, что позволяет отказаться от использования XML;</li>
22
<li>не зависеть от множественного импорта Maven и конфликтов версий, связанных с этим;</li>
22
<li>не зависеть от множественного импорта Maven и конфликтов версий, связанных с этим;</li>
23
<li>обеспечивать мощную пакетную обработку и управлять конечными точками RES;</li>
23
<li>обеспечивать мощную пакетную обработку и управлять конечными точками RES;</li>
24
<li>упрощать интеграцию с другими Java-фреймворками, такими как JPA / Hibernate ORM, Struts и так далее;</li>
24
<li>упрощать интеграцию с другими Java-фреймворками, такими как JPA / Hibernate ORM, Struts и так далее;</li>
25
<li>локально запускать встроенные HTTP-серверы, такие как Tomcat и Jetty, упрощая разработку и тестирование веб-приложений.</li>
25
<li>локально запускать встроенные HTTP-серверы, такие как Tomcat и Jetty, упрощая разработку и тестирование веб-приложений.</li>
26
</ul><p>Всё это и привело к широкому распространению Spring Boot, сделав его основным инструментом для разработки веб-приложений при работе с фреймворком Spring.</p>
26
</ul><p>Всё это и привело к широкому распространению Spring Boot, сделав его основным инструментом для разработки веб-приложений при работе с фреймворком Spring.</p>
27
<p>Знакомство с библиотекой можно<a>начать с официальной документации</a>. В ней собраны краткие описания основных аннотаций, классов и методов, а также разобраны практические примеры их использования. После этого лучше<a>перейти на "продвинутую" документацию</a>с разбором методов работы с JSON, логированием, тестированием и другими деталями.</p>
27
<p>Знакомство с библиотекой можно<a>начать с официальной документации</a>. В ней собраны краткие описания основных аннотаций, классов и методов, а также разобраны практические примеры их использования. После этого лучше<a>перейти на "продвинутую" документацию</a>с разбором методов работы с JSON, логированием, тестированием и другими деталями.</p>
28
<p>Для отработки знаний на практике у Spring Boot есть<a>большой гайд</a>с разработкой отдельных приложений и их частей. И конечно, не стоит забывать<a>официальную документацию</a>самого фреймворка Spring. В ней подробно разобрана работа не только с Boot, но и с другими модулями.</p>
28
<p>Для отработки знаний на практике у Spring Boot есть<a>большой гайд</a>с разработкой отдельных приложений и их частей. И конечно, не стоит забывать<a>официальную документацию</a>самого фреймворка Spring. В ней подробно разобрана работа не только с Boot, но и с другими модулями.</p>
29
<p>Spring Boot "из коробки" имеет несколько инструментов, ускоряющих работу программиста.</p>
29
<p>Spring Boot "из коробки" имеет несколько инструментов, ускоряющих работу программиста.</p>
30
<p>Одна из особенностей Spring Boot - Spring Boot Starters. Это предварительно настроенные зависимости, облегчающие работу с проектом. В зависимости от задач к приложению можно подключить один или несколько starter-пакетов.</p>
30
<p>Одна из особенностей Spring Boot - Spring Boot Starters. Это предварительно настроенные зависимости, облегчающие работу с проектом. В зависимости от задач к приложению можно подключить один или несколько starter-пакетов.</p>
31
<p>Например, в Spring Boot Starter Web есть инструменты для разработки веб-приложений (Tomcat, Jackson) и для обработки JSON. А Spring Boot Starter Test содержит классы и зависимости для тестирования, такие как Mockito и Spring Boot Test.</p>
31
<p>Например, в Spring Boot Starter Web есть инструменты для разработки веб-приложений (Tomcat, Jackson) и для обработки JSON. А Spring Boot Starter Test содержит классы и зависимости для тестирования, такие как Mockito и Spring Boot Test.</p>
32
<p>Подробное описание Spring Boot Starters с примерами работы можно<a>найти в документации</a>.</p>
32
<p>Подробное описание Spring Boot Starters с примерами работы можно<a>найти в документации</a>.</p>
33
<p>Разработчик, пишущий код на Spring Boot, может запускать встроенные веб-серверы: Tomcat, Jetty и Undertow, не тратя время на настройку сторонних серверов. Если же ему по какой-то причине необходимо использовать свой сервер, то для этого достаточно исключить зависимости по умолчанию и выбрать подходящий starter-пакет.</p>
33
<p>Разработчик, пишущий код на Spring Boot, может запускать встроенные веб-серверы: Tomcat, Jetty и Undertow, не тратя время на настройку сторонних серверов. Если же ему по какой-то причине необходимо использовать свой сервер, то для этого достаточно исключить зависимости по умолчанию и выбрать подходящий starter-пакет.</p>
34
<p>Как и родительский фреймворк, Spring Boot позволяет работать со встроенными модулями, которые легко интегрируются в приложения, добавляя функциональность и ускоряя разработку. Например:</p>
34
<p>Как и родительский фреймворк, Spring Boot позволяет работать со встроенными модулями, которые легко интегрируются в приложения, добавляя функциональность и ускоряя разработку. Например:</p>
35
<ul><li>Spring Data - позволяет работать с различными базами данных;</li>
35
<ul><li>Spring Data - позволяет работать с различными базами данных;</li>
36
<li>Spring Boot Actuator - функция для мониторинга и управления созданным приложением.</li>
36
<li>Spring Boot Actuator - функция для мониторинга и управления созданным приложением.</li>
37
</ul><p>Все встроенные функции подробно<a>описаны в документации</a>и указаны в левом столбце меню.</p>
37
</ul><p>Все встроенные функции подробно<a>описаны в документации</a>и указаны в левом столбце меню.</p>
38
<p>Для того чтобы приступить к работе со Spring Boot, нам необходимо создать новый проект и подготовить IDE к работе.</p>
38
<p>Для того чтобы приступить к работе со Spring Boot, нам необходимо создать новый проект и подготовить IDE к работе.</p>
39
<p>Самый простой способ подготовить фреймворк для работы - воспользоваться сайтом<a>start.spring.io</a>. Это конструктор, который позволяет легко задать конфигурацию проекта на Spring Boot.</p>
39
<p>Самый простой способ подготовить фреймворк для работы - воспользоваться сайтом<a>start.spring.io</a>. Это конструктор, который позволяет легко задать конфигурацию проекта на Spring Boot.</p>
40
<p>Откроем сайт:</p>
40
<p>Откроем сайт:</p>
41
<em>Скриншот: Spring Boot / Skillbox Media</em><p>В левой части экрана указаны различные варианты настройки, включая параметры проекта. Так как мы тестируем возможность запуска Spring Boot, то можем ничего не менять. Обратите внимание, что сайт автоматически предлагает использовать наиболее актуальную версию Spring Boot. На 5 июля это 3.1.1.</p>
41
<em>Скриншот: Spring Boot / Skillbox Media</em><p>В левой части экрана указаны различные варианты настройки, включая параметры проекта. Так как мы тестируем возможность запуска Spring Boot, то можем ничего не менять. Обратите внимание, что сайт автоматически предлагает использовать наиболее актуальную версию Spring Boot. На 5 июля это 3.1.1.</p>
42
<p>В правой части указаны зависимости, которые мы можем использовать в своём проекте. Для работы с веб-приложением требуется нажать на кнопку<strong>ADD DEPENDENCIES</strong>и добавить пункт<strong>Spring Web</strong>:</p>
42
<p>В правой части указаны зависимости, которые мы можем использовать в своём проекте. Для работы с веб-приложением требуется нажать на кнопку<strong>ADD DEPENDENCIES</strong>и добавить пункт<strong>Spring Web</strong>:</p>
43
<em>Скриншот: Spring Boot / Skillbox Media</em><p>Теперь на экране будет видна добавленная зависимость:</p>
43
<em>Скриншот: Spring Boot / Skillbox Media</em><p>Теперь на экране будет видна добавленная зависимость:</p>
44
<em>Скриншот: Spring Boot / Skillbox Media</em><p>Нажимаем кнопку<strong>Generate</strong>и скачиваем архив - это шаблон нашего проекта. Он скоро пригодится.</p>
44
<em>Скриншот: Spring Boot / Skillbox Media</em><p>Нажимаем кнопку<strong>Generate</strong>и скачиваем архив - это шаблон нашего проекта. Он скоро пригодится.</p>
45
<p>Пока разархивируем его и зайдём в директорию. В ней содержится нескольких файлов:</p>
45
<p>Пока разархивируем его и зайдём в директорию. В ней содержится нескольких файлов:</p>
46
<ul><li>файл mnvw, который позволяет запустить проект Maven без его установки;</li>
46
<ul><li>файл mnvw, который позволяет запустить проект Maven без его установки;</li>
47
<li>файл pom.xml, содержащий описания всех зависимостей приложения;</li>
47
<li>файл pom.xml, содержащий описания всех зависимостей приложения;</li>
48
<li>каталог java - основной каталог пакетов и классов;</li>
48
<li>каталог java - основной каталог пакетов и классов;</li>
49
<li>каталог resources, хранящий ресурсы: шаблоны, файлы настроек, локализации и так далее;</li>
49
<li>каталог resources, хранящий ресурсы: шаблоны, файлы настроек, локализации и так далее;</li>
50
<li>application.properties - файл с настройками проекта, размещённый в подпапках шаблона.</li>
50
<li>application.properties - файл с настройками проекта, размещённый в подпапках шаблона.</li>
51
</ul><p>Вся последующая работа будет проходить именно в этой директории.</p>
51
</ul><p>Вся последующая работа будет проходить именно в этой директории.</p>
52
<p>Для работы со Spring Boot подойдёт любой из популярных редакторов кода, например<a>IntelliJ IDEA</a>или<a>Visual Studio Code</a>.</p>
52
<p>Для работы со Spring Boot подойдёт любой из популярных редакторов кода, например<a>IntelliJ IDEA</a>или<a>Visual Studio Code</a>.</p>
53
<p>Мы будем использовать Visual Studio Code. Запустите редактор и создайте новый проект. После этого перейдите в раздел<strong>Extensions</strong>и в поиске найдите<strong>Spring Boot Extension Pack</strong>:</p>
53
<p>Мы будем использовать Visual Studio Code. Запустите редактор и создайте новый проект. После этого перейдите в раздел<strong>Extensions</strong>и в поиске найдите<strong>Spring Boot Extension Pack</strong>:</p>
54
<em>Скриншот: Spring Boot / Skillbox Media</em><p>Установите его. Теперь в VSC можно будет работать со Spring Boot и создавать веб-приложения.</p>
54
<em>Скриншот: Spring Boot / Skillbox Media</em><p>Установите его. Теперь в VSC можно будет работать со Spring Boot и создавать веб-приложения.</p>
55
<p>Теперь в скачанном архиве в директории src/main/java/com/example/demo откройте файл DemoApplication.java:</p>
55
<p>Теперь в скачанном архиве в директории src/main/java/com/example/demo откройте файл DemoApplication.java:</p>
56
<em>Скриншот: Spring Boot / Skillbox Media</em><p>В этом файле будем писать весь код. По умолчанию он используется в качестве стартовой страницы при запуске сервиса. В нём можем писать код на Java, вставлять элементы из HTML и CSS для оформления страницы.</p>
56
<em>Скриншот: Spring Boot / Skillbox Media</em><p>В этом файле будем писать весь код. По умолчанию он используется в качестве стартовой страницы при запуске сервиса. В нём можем писать код на Java, вставлять элементы из HTML и CSS для оформления страницы.</p>
57
<p>Мы подготовили наш редактор кода к работе со Spring Boot и создали шаблон проекта. Теперь приступим к созданию веб-приложения.</p>
57
<p>Мы подготовили наш редактор кода к работе со Spring Boot и создали шаблон проекта. Теперь приступим к созданию веб-приложения.</p>
58
<p>Начнём с классического приложения приветствия. Напишем код, который будет создавать веб-страницу с надписью "Привет, читатели Skillbox Media". Для этого заменим код в VSC на новый:</p>
58
<p>Начнём с классического приложения приветствия. Напишем код, который будет создавать веб-страницу с надписью "Привет, читатели Skillbox Media". Для этого заменим код в VSC на новый:</p>
59
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @GetMapping("/hello") public String hello(@RequestParam(value = "name", defaultValue = "читатель Skillbox Media") String name) { return String.format("Hello, %s!", name); } }<p>В начале кода мы импортируем несколько классов и аннотаций, облегчающих работу:</p>
59
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @GetMapping("/hello") public String hello(@RequestParam(value = "name", defaultValue = "читатель Skillbox Media") String name) { return String.format("Hello, %s!", name); } }<p>В начале кода мы импортируем несколько классов и аннотаций, облегчающих работу:</p>
60
<ul><li>org.springframework.boot.SpringApplication - класс, который часто используется для загрузки и запуска приложений Spring;</li>
60
<ul><li>org.springframework.boot.SpringApplication - класс, который часто используется для загрузки и запуска приложений Spring;</li>
61
<li>org.springframework.boot.autoconfigure.SpringBootApplication - обозначает класс конфигурации, который объявляет один или несколько методов @Bean, а также запускает автоконфигурацию и сканирование компонентов в коде;</li>
61
<li>org.springframework.boot.autoconfigure.SpringBootApplication - обозначает класс конфигурации, который объявляет один или несколько методов @Bean, а также запускает автоконфигурацию и сканирование компонентов в коде;</li>
62
<li>org.springframework.web.bind.annotation.GetMapping - аннотация для отображения результатов HTTP-запрос методом GET на определённые методы, функция которых - обрабатывать события;</li>
62
<li>org.springframework.web.bind.annotation.GetMapping - аннотация для отображения результатов HTTP-запрос методом GET на определённые методы, функция которых - обрабатывать события;</li>
63
<li>org.springframework.web.bind.annotation.RequestParam - аннотация, указывающая, что параметр метода должен быть связан с параметром веб-запроса;</li>
63
<li>org.springframework.web.bind.annotation.RequestParam - аннотация, указывающая, что параметр метода должен быть связан с параметром веб-запроса;</li>
64
<li>org.springframework.web.bind.annotation.RestController - удобная аннотация, которая сама аннотирована @Controller и @ResponseBody.</li>
64
<li>org.springframework.web.bind.annotation.RestController - удобная аннотация, которая сама аннотирована @Controller и @ResponseBody.</li>
65
</ul><p>Аннотация @RestController сообщает Spring, что этот код описывает конечную точку, которая должна быть доступна через веб-интерфейс. Аннотация @GetMapping ("/hello") указывает Spring, что надо использовать указанный ниже метод hello() для ответа на запросы, отправленные на адрес<a>http://localhost:8080/hello</a>.</p>
65
</ul><p>Аннотация @RestController сообщает Spring, что этот код описывает конечную точку, которая должна быть доступна через веб-интерфейс. Аннотация @GetMapping ("/hello") указывает Spring, что надо использовать указанный ниже метод hello() для ответа на запросы, отправленные на адрес<a>http://localhost:8080/hello</a>.</p>
66
<p>@RequestParam указывает Spring, что в запросе должно быть значение name, а если его там нет, то нужно использовать по умолчанию строку читатель Skillbox Media.</p>
66
<p>@RequestParam указывает Spring, что в запросе должно быть значение name, а если его там нет, то нужно использовать по умолчанию строку читатель Skillbox Media.</p>
67
<p>Метод hello(), который мы добавили, принимает параметр name с типом String, а затем объединяет этот параметр со словом Hello в коде. Это означает, что если вы зададите в запросе имя Иван, то ответом будет Hello, Иван. Имя можно прописать вручную в параметре defaultValue.</p>
67
<p>Метод hello(), который мы добавили, принимает параметр name с типом String, а затем объединяет этот параметр со словом Hello в коде. Это означает, что если вы зададите в запросе имя Иван, то ответом будет Hello, Иван. Имя можно прописать вручную в параметре defaultValue.</p>
68
<p>Для запуска кода нажмём кнопку<strong>Run</strong>в нашей IDE. В Visual Studio Code это кнопка<strong>Run and Debug</strong>:</p>
68
<p>Для запуска кода нажмём кнопку<strong>Run</strong>в нашей IDE. В Visual Studio Code это кнопка<strong>Run and Debug</strong>:</p>
69
<em>Скриншот: Spring Boot / Skillbox Media</em><p>В терминале IDE появится информация о запуске Spring Boot:</p>
69
<em>Скриншот: Spring Boot / Skillbox Media</em><p>В терминале IDE появится информация о запуске Spring Boot:</p>
70
<em>Скриншот: Spring Boot / Skillbox Media</em><p>Если код написан неправильно, то вместо этого окна вы увидите информацию об ошибках. Но у нас всё хорошо. Не завершая работу кода в IDE, откроем браузер и перейдём по адресу<a>http://localhost:8080/hello</a>.</p>
70
<em>Скриншот: Spring Boot / Skillbox Media</em><p>Если код написан неправильно, то вместо этого окна вы увидите информацию об ошибках. Но у нас всё хорошо. Не завершая работу кода в IDE, откроем браузер и перейдём по адресу<a>http://localhost:8080/hello</a>.</p>
71
<p>На экране наша надпись:</p>
71
<p>На экране наша надпись:</p>
72
<em>Скриншот: Spring Boot / Skillbox Media</em><p>Усложним задачу - попробуем вывести имя читателя вместо обезличенного обращения. Для этого откроем страницу с именем, переданным в качестве параметра name:</p>
72
<em>Скриншот: Spring Boot / Skillbox Media</em><p>Усложним задачу - попробуем вывести имя читателя вместо обезличенного обращения. Для этого откроем страницу с именем, переданным в качестве параметра name:</p>
73
<p><a>http://localhost:8080/hello?name=Anton</a></p>
73
<p><a>http://localhost:8080/hello?name=Anton</a></p>
74
<p>Результат:</p>
74
<p>Результат:</p>
75
<em>Скриншот: Spring Boot / Skillbox Media</em><p>Всё получилось. Мы видим не общее обращение к читателям, а имя человека.</p>
75
<em>Скриншот: Spring Boot / Skillbox Media</em><p>Всё получилось. Мы видим не общее обращение к читателям, а имя человека.</p>
76
<a>Курс с трудоустройством: "Профессия Java-разработчик + ИИ" Узнать о курсе</a>
76
<a>Курс с трудоустройством: "Профессия Java-разработчик + ИИ" Узнать о курсе</a>