Spring Boot.

Spring хорош многим. Здесь и внушительное сообщество разработчиков и большое количество разнообразных модулей на все случаи жизни и удобство в использовании. Но чем же так хорош проект Spring Boot и почему он может стать наилучшим решением для внедрения его у вас на проекте? Какие преимущества вы получаете? Об этом мы и поговорим в этой статье.

Сложность конфигурации при использовании Spring.

Основная проблема при разработке программных проектов — это управление сложностью. Spring отчасти решает проблему сложности разработки ПО благодаря своей модульности и модели программирования на основе POJO (Plain Old java Object). Но проблема простого конфигурирования и быстрого развертывания приложения в контейнере все еще остается. Прописывание многотонных XML-конфигов и настроек развертывания иногда превращается в настоящий ад. Как минимум, такой подход очень сильно отвлекает от работы с тем, что действительно важно в процессе разработки программного обеспечения — вашей предметной области и решения реальных задач бизнеса. Бизнесу нужно, чтобы здесь и сейчас это работало и работало правильно.

Если вы хоть раз использовали Spring, то вам будет знакома ситуация, когда перед началом работы над проектом вы скурпулезно, шаг за шагом, создаете свою конфигурацию, заполняя все больше и больше раздувающийся XML-файл, подключая миллион нужных зависимостей и, наконец, настраивая соединение с базой данных и прописывая конфигурацию развертывания на каком-нибудь Tomcat.

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

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

Convention over Configuration.

Соглашение по конфигурации — это некоторая парадигма проектирования ПО, при использовании которой настройка компонентов программы выполняется только тогда, когда нас не устраивают значения по умолчанию. Например, многие ORM-фреймворки вроде Hibernate по умолчанию выполняют отображение поля объекта в столбец таблицы с таким же именем. Также действуют и фреймворки для сериализации, например, в JSON.

И если эти значения по умолчанию выбраны действительно разумным образом, то это значительно упрощает жизнь, уменьшает необходимость в написании лишнего boilerplate-кода, аннотаций, настроек в XML.

Convention over Configuration — основной подход, который используется в Spring Boot.

Если ваша задача — небольшой проект-прототип (Spring Boot нереально удобен для прототипирования) или небольшой микросервис (на самом деле многие уже используют Spring Boot и в продакшене) или же вы только начинаете свое знакомство со Spring, то Spring Boot по-настоящему выручает.

Я ощутил всю простоту работы со Spring Boot по сравнению со стандартным процессом настройки всего и вся почти сразу. Это оказалось очень удобно. Чтобы запустить простейший REST-сервис, нужно от силы полчаса свободного времени (на самом деле и того меньше, если вы уже со всем разобрались).

Если у вас есть это время и вы все еще верите в будущее Spring и Java, идем дальше.

Подключаем Spring Boot.

Перейдем к практике и попробуем создать свой первый простой REST-сервис с помощью Spring Boot.

Создайте в IDEA новый проект (для сборки проектов я использую Maven) и добавьте в него всего одну зависимость:

В секции <parent> я прописал зависимость spring-boot-starter-parent. Что это значит?

На самом деле этот проект содержит набор настроек по умолчанию, возможности автоконфигурации, логирования и тех зависимостей Maven, которые могут понадобиться вам при создании стандартного приложения Spring.

Но все зависимости находятся внутри секции <dependencyManagement>, поэтому если вы выполните команду mvn tree:dependency (печатает на экран дерево зависимостей вашего проекта), то вы увидите, что никаких новых jar’ников в вашем проекте не появилось.

Например, если в вашем проекте вы используете работу с базой данных и ORM Hibernate, вы добавляете зависимость spring-boot-starter-data-jpa и все нужные для этого зависимости будут добавлены в ваш проект. Создаете веб-приложение? Для этого есть spring-boot-starter-web!

Вот и вам и подход соглашения по конфигурации в действии.

В Spring есть и другие «starters» — проекты, которые просто предоставляют вам набор значений по умолчанию под нужды того проекта, который вы разрабатываете.

Создаем web-приложение.

А теперь давайте превратим наш проект в небольшое веб-приложение.Создадим простейший REST-сервис и попробуем его запустить.

Так как мы создаем веб-приложение, то добавим в проект подходящий «starter»spring-boot-starter-web.

После этого в проект добавилось несколько новых зависимостей, среди которых есть классы для поддержки Spring MVC, а также встроенный Tomcat.

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

При старте приложения все выполнится автоматически. Приложение просто запустится и просто заработает.

Создадим простой контроллер:

Аннотации @RestController и @RequestMapping говорят о том, что HTTP-запрос, который придет по пути «/» приведет к вызову метода test().

Метод test() возвращает обычную строку, а не представление, как это было бы при использовании стандартной аннотации @Controller.

Метод «main()».

Итак, у нас есть готовый контроллер и встроенный Tomcat. Нам нужен main() — метод, с которого будет начинать выполнение наше приложение:

В методе main() мы просто делегируем всю работу классу SpringApplication. При вызове его метода run(), инициализируется контекст Spring и запустится встроенный Tomcat, на котором в свою очередь будет развернуто наше приложение!

Аннотация @SpringBootApplication была введена в Spring исключительно ради удобства. Разработчики, использующие в своей практике Spring Boot, часто помечают свои классы такими аннотациями, как: @Configuration (данный класс содержит объявление бинов Spring), @EnableAutoConfiguration (Spring на основе набора jar-файлов в вашем проекте пытается выполнить автоконфигурацию проекта) и @ComponentScan (сканирование пакетов в поисках бинов Spring)..

Как альтернатива этим трем аннотациям в Spring и была дополнительно была введена @SpringBootApplication.

Наконец, запустив приложение, мы увидим примерно следующее:

Мы видим, что приложение успешно стартовало. Также запустился Tomcat, который слушает запросы на порту 8080.

Выводы.

Поначалу вам может показаться странным и немного пугающим, что Spring Boot много делает за кулисами сам: находит зависимости, конфигурируется, запускается. Однако в действительности он сильно упрощает вам жизнь и если даже вам в вашем приложении вдруг понадобится какая-то специфическая настройка, вы по-прежнему свободны в своем выборе. Но и это еще не совсем все.

Проект Spring Boot предлагает нам также специальный spring-boot-maven-plugin. Его основная работа заключается в том, что он упаковывает приложение вместе со всеми зависимостями из classpath в один «uber-jar» и добавляет в MANIFEST.MF название обычного main-класса Java, c которого начнет выполняться ваше приложение.

То есть мы можем просто взять свое приложение, позволить spring-boot-maven-plugin’у упаковать его в обычный jar-ник, скинуть своему коллеге или другу на его компьютер и оно там будет работать без каких-либо дополнительных усилий.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *