Spring Boot: в чём его сила и удобство?

Что такое Spring Boot приложение?

Spring Boot приложение это почти то же самое Spring приложение, что мы изучали раньше, но с дополнительными средствами упрощающими разработку. Эти средства помогают легче конфигурировать наше приложение и взаимодействовать с ним.

Отметим основные моменты:

1. Во первых, в Spring Boot приложении сокращено количество файлов (нет файла настроек бинов applicationContext, файла web.xml и других), которые нужно было конфигурировать вручную и где легко ошибиться и потом долго искать ошибку.

В Spring Boot приложении нам вообще не придется лезть в папку WEB-INF (которой собственно и нет в Spring Boot приложении). Спринг Бут сам за кулисами конфигурирует приложение. А нужные нам настройки пишутся в отдельном файле настроек application.properties в очень коротком и простом виде.

2. Второй важный момент, что не нужно беспокоиться о совместимости версий зависимостей в pom, ведь часто приходиться тратить много времени на поиск совместимых. Спринг Бут предоставляет специальные зависимости, которые представляют собой наборы всем нам известных ранее зависимостей, которые уже сразу между собой совместимы.

3. В третьих, стартовый Спринг Бут проект можно настроить (настроить стартовые зависимости, тип сборщика Maven или Gradle и т.д.) удобным интуитивным интерфейсом в интернете на сайте Spring Initializer и скачать этот настроенный проект с этого сайта. Что упрощает стартовую конфигурацию проекта.

Раньше, чтобы создать новый Spring проект, приходилось копировать старый проект и редактировать его, потому что создавать Spring проект с нуля морока серьезная. Спринг Бут же серьезно упрощает создание нового Спринг проекта.

Давайте зайдем на сайт https://start.spring.io/ , сконфигурируем и скачаем наше первое Spring Boot приложение:

Видим интерфейс для настройки стартового Spring Boot приложения. Здесь, как видим, можно выбрать сборщик проекта (они бывают разные, но мы выберем Maven), язык Spring Boot проекта, его версию, и также можно сразу настроить метаданные проекта (это то что, как мы помним, сверху в pom файле).

Также можно сразу добавить зависимости в проект. Для этого нажимаем на Add Dependencies…

В результате откроется окно в котором можно найти и добавить в проект набор зависимостей(как уже упоминалось, в сприг бут наборы, а не отдельные зависимости):

Добавим такие наборы зависимостей: Web(добавляет поддержку Spring MVC, сервлетов и т.д.), jpa(поддержка Hibernate и др.) и MySql Driver(для возможности подключения к базе).

Всё мы сконфигурировали наш стартовый проект.

Spring Initializer настолько удобен, что перед скачиванием настроенного проекта его даже можно просмотреть прямо на сайте. То есть просмотреть структуру проекта и его файлы.

Нажимаем Download. Наше первое Spring Boot приложение должно скачаться на компьютер.

4. Ну и наверное самый важный момент из выше перечисленных, это то что скачиваемый Spring Boot проект уже сразу в себе содержит Tomcat сервер на котором мы запускаем скачанное Spring Boot приложение. То есть нам не нужно скачивать Tomcat отдельно и запускать через него спринг приложения, сервер уже СРАЗУ встроен в приложение, которое скачано с сайта Spring Initializer.

Также Spring Boot имеет различную другую функциональность, которая будет рассмотрена далее.


Spring Boot приложение.

Давайте добавим скачанное стартовое приложение в Eclipse. Для этого переходим по пути File -> Open Projects from File System и там указываем путь к папке скачанного проекта. Взглянем на структуру и файлы Spring Boot приложения.

Как видим, оно отличается от тех Спринг приложений, которые были раньше. Видим, что папка WEB-INF в src отсутствует и присутствуют некоторые новые папки и файлы.

mvnwдля запуска мавен проекта из командной строки. Автоматически подгружает мавен при запуске проекта если он не установлен или обновляет его.

То есть запустить приложение можно из консоли не открывая IDE. Давайте сделаем это.

Вводим в папке приложения mvnw package, что загружает мавен если его нет и создает jar файл:

В папке target должен появиться jar файлик нашего приложения. Его теперь можно запустить.

Далее вводим java -jar (имя приложения).jar и оно запускается

properties – здесь все настройки Spring Boot приложения. Настройки совершаются в формате свойств типа some.prop=”value” (то есть имя свойства и его значение). В примере ниже можно увидеть, что таким образом можно настраивать приложение в очень лаконичной форме. Можно с помощью свойства server.port изменить порт на котором запускается наше приложение, а например с помощью server.servlet.context-path можно изменить корневой элемент в адресе. Также можно увидеть, что здесь настраиваются уровни логирования, данные для подключения к БД, время жизни сессии и вообще все основные настройки Спринг Бут приложения происходят здесь в этом файле.

Можно также добавлять сюда кастомные свойства типа some.custom.prop="value" и можно внедрить их в строку.

Кто помнит из прошлых уроков их можно извлекать в классах приложения с помощью аннотации @Value("\${some.custom.prop}") и внедрять в String поле.

#Lets watch on some of important settings. There are lots of them #we can change port of app. Now it will be 7070 instead of 8080 server.port=7070 #we can change context path – root element of addresses in project server.servlet.context-path=/firstSpringBootApp #can set lifetime of session server.servlet.session.timeout=120s #can set logging levels to folders of project logging.level.com.springboot=TRACE logging.level.org.hibernate=DEBUG #database info. spring.datasource.url=jdbc:mysql://localhost/storage spring.datasource.username=root spring.datasource.password=07998MSD spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

В папке static проекта хранятся все статические ресурсы, типа обычных html страниц,css файлов,картинок и т.д

В template хранятся динамические страницы типа JSP,Thyseleaf(аналог JSP)

pom файлик в Spring Boot приложении отличается некоторыми элементами от обычного веб приложения.

Здесь можно увидеть настройки, которые мы делали через интерфейс сайта Spring Initializr. То есть метаданные, версию спринг бута и также зависимости, которые мы включали в проект. Также здесь мы включим еще одну нужную зависимость devtools вручную, о который написано ниже.

4.0.0 org.springframework.boot spring-boot-starter-parent 3.1.5 com.SpringBootApps firstSpringBootApp 0.0.1-SNAPSHOT firstSpringBootApp Demo project for Spring Boot 17 org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-web com.mysql mysql-connector-j runtime org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-devtools test org.springframework.boot spring-boot-maven-plugin

Аннотация @SpringBootApplication в файле ниже состоит из трех аннотаций@EnableAutoConfiguration (нужна для включения автоматической конфигурации Spring Boot) и знакомых нам @ComponentScan и @Configuration (кто помнит использовались в Java версии файла applicationContext.xml для конфигурации бинов).

То есть через этот класс происходит конфигурация приложения, только она происходит за кулисами средствами Spring Boot, а нам ничего конфигурировать не нужно.

Создание бинов на основе классов, помеченных специальными аннотациями (@Component, @Controller, @Repository, @Service), происходит с помощью аннотации @ComponentScan.

Эта аннотация автоматически сканирует все подпапки той директории, в которой находится класс с методом main() (обычно это Application.java).

Вернитесь немного назад и посмотрите на структуру проекта ещё раз: файл с main находится на уровень выше папки controller, в которой лежит контроллер.

То же самое должно быть и с остальными директориями — service, dao и другими.
Все они должны быть вложены в ту же корневую папку или быть её поддиректориями, чтобы @ComponentScan смог обнаружить и зарегистрировать все нужные бины, и приложение корректно работало.

Запуск приложения, автоматическая конфигурация бинов, сканирование поддеректорий и другие настройки происходят методом run в main методе.

Запускать Spring Boot приложение можно как обычное Java приложение, то есть через метод main, что удобно (можно воспользоваться кнопкой Run в Eclipse IDE).

package com.SpringBootApps.firstSpringBootApp; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class FirstSpringBootAppApplication { public static void main(String[] args) { SpringApplication.run(FirstSpringBootAppApplication.class, args); } }

Давайте в классе контроллере создадим простенький обработчик для теста первого Спринг Бут приложения.

package com.SpringBootApps.firstSpringBootApp.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; public class MainController { @GetMapping(“/helloworld”) public String helloWorld() { return “Hello world!!!”; } }

Запустим приложение через main файл и перейдем к обработчику по определенному адресу /helloworld.

Как видим, обработчик успешно прислал строку в ответ на запрос.

При этом можно увидеть, что обращение к обработчику идет через порт 7070 и через корневой путь firstSpringBootApp. Это было настроено, как мы помним, в файле application.properties

Создание Spring Boot CRUD-приложения

Spring Boot + JPA + Hibernate: создание CRUD API. EntityManager для работы с разными реализациями JPA. Настройка через application.properties.
Time to read: 20

Создание Spring Boot Data CRUD-приложения

Используйте JpaRepository для CRUD без ручного DAO. Готовые методы save(), findAll(). Сравнение с классической реализацией Spring MVC.
Time to read: 20

Создание Spring Boot Data Rest CRUD-приложения

Автоматизируйте CRUD с Spring Data REST. Минимум кода: без DAO, Service и Controller. Генерация REST-эндпоинтов и метаданных в JSON.
Time to read: 19