spring boot starter что это

Пишем свой spring-boot-starter

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

Всё удобство Spring Boot основано на использовании так называемых Starter, которые позволяют получить набор сконфигурированных бинов, готовых к использованию и доступных для конфигурации через properties-файлы. Но что делать, если для нужной технологии еще не написано стартера?

В этой статье мне бы хотелось рассказать о том, как создаются стартеры на примере стартера для Spring-social-vkontakte. Spring Social это один из модулей Spring Framework, используемый для интеграции с социальными сетями. В проект Spring Boot включены стартеры для таких социальных сетей как Facebook (spring-boot-starter-social-facebook), Twitter (spring-boot-starter-social-twitter) и LinkedIn (spring-boot-starter-social-twitter), основанные на использовании соответствующих Social-модулей. Большинство разработчиков из СНГ интересует в первую очередь социальная сеть Вконтакте, для которой существует сторонний модуль spring-social-vkontakte. Соответственно, стартера для этого модуля еще нет. Написанием этого стартера мы и займемся в этой статье.

Краеугольным камнем инфраструктуры Spring Boot являются AutoConfiguration-классы, которые Spring Boot находит при запуске приложения и использует для автоматического создания и конфигурирования бинов.

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

Мы используем аннотации, чтобы указать SpringBoot, что наш класс является конфигурацией (@Configuration), аннотации, чтобы задать условия, при которых наш AutoConfiguration будет использоваться для создания бинов, а также аннотации, чтобы указать каково место нашей автоконфигурации в процедуре инициализации приложения.

означает, что бины будут создаваться при наличии в classpath SocialConfigurerAdapter(входит в модуль Spring-Social) и VKontakteConnectionFactory (входит в модуль Spring-Social-Vkontakte). Таким образом, без нужных для нашего стартера зависимостей бины создаваться не будут.

означает, что бины будут создаваться только при наличии property ru.shadam.social-vkontakte.client-id и ru.shadam.social-vkontakte.client-secret.

означает, что наш бин будет инициализироваться после WebMvc и до SocialWeb. Это нужно, чтобы к моменту инициализации SocialWeb наши бины уже были зарегистрированы.

Теперь перейдем к тому, какие бины мы сконфигурируем в нашем AutoConfiguration.

Расширяем SocialConfigurationAdapter, который нужен для того чтобы зарегистрировать нашу ConnectionFactory. Для этого в SocialConfigurerAdapter есть callback-метод:

Его мы и переопределим, добавляя нашу ConnectionFactory.

Также зарегистрируем request-scoped бин Vkontakte, которые представляет собой интерфейс для доступа к API Вконтакте. При этом, если пользователь авторизуется через приложение, то операции взаимодействия с API будет выполнено с использованием auth_token.

Рассмотрим также класс VkontakteProperties, который используется для получения конфигурации из properties-файлов приложения

За получение значений из properties файлов отвечает аннотация:

Она сообщает SpringBoot, что нужно попытаться все проперти, начинающиеся с префикса ru.shadam.social-vkontakte поместить в соответствующие поля класса.

Последним нашим шагом будет создание файла, позволяющего SpringBoot найти наш AutoConfiguration класс. Для этого существует специальный файл spring.factories, который нужно поместить в META-INF папку получающегося jar-файла.

В этом файле нам надо указать наш AutoConfiguration-класс.

Источник

Spring Boot: от начала до продакшена

spring boot starter что это. Смотреть фото spring boot starter что это. Смотреть картинку spring boot starter что это. Картинка про spring boot starter что это. Фото spring boot starter что этоspring boot starter что это. Смотреть фото spring boot starter что это. Смотреть картинку spring boot starter что это. Картинка про spring boot starter что это. Фото spring boot starter что это
В данной статье я попробую расписать все шаги, которые потребуются для создания небольшого проекта на Spring Boot и развертывания его на боевом сервере.

Не будем тянуть долгими прелюдиями о философии java и spring’а, и сразу приступим к делу.

Для начала нам необходимо создать каркас приложения, внедрив туда весь необходимый зоопарк технологий(как минимум Spring, JPA, JDBC). До появления spring boot нужно было потратить на это немало времени, если конечно у вас не было рабочей заготовки в закромах кода. И именно сложность создания подобного каркаса, как мне кажется, останавливает многих от разработки небольших веб-проектов на java. Конечно, когда-то был хромой spring roo, который мог создать подобный каркас в ущерб производительности(привет аспектам), но даже с ним количество и сложность конфигурационных файлов заставляли долго медитировать над ними неподготовленного разработчика. Однако теперь с приходом Boot и Spring 4 жизнь стала немного проще и количество конфигурационных файлов заметно уменьшилось.

Если же у вас нет данной IDE, то скачиваем Spring Boot CLI, следуем инструкции в INSTALL.txt. Нужно задать системную переменную SPRING_HOME(путь к папке со Spring Boot, не к папке bin!) и добавить путь к SPRING_HOME/bin в системную переменную PATH на windows.

Итак, консоль спринга настроили, теперь самое время создать проект. Сделать это можно следующей командой:

UPDATE
Кроме того, как написали в комментариях, существует еще веб-конструктор: start.spring.io

Далее импортируем получившийся каркас в любимую IDE и начинаем его модифицировать под наши нужды.

Для начала добавим в каталог src/main папку webapps. Все веб-ресурсы мы будем создавать в ней, а не в папке resources, как хочет того спринг. Дело в том, что если мы будем создавать файлы в папке resources, то тогда мы лишимся возможности видеть изменения, сделанные в наших веб-ресурсах, без перезагрузки сервера. А это может быть неприятно, когда ради того, чтобы посмотреть изменившийся текст на веб-странице приходится перезапускать веб-сервер.

Теперь в папке webapps создаем файл index.html и папки css, js, font, images, в которые будем класть соответствующие ресурсы.

Для примера сделаем самый простой каркас index.html:

Изменим файл pom.xml
Должно получиться что-то подобное:

Из pom-файла мы можем увидеть следующее:
Мы используем java 8(самое время ее попробовать). Наш класс приложения называется com.yourcompany.Application(не забудьте переименовать стандартно сгенерированный класс, который может называться к примеру DemoApplication).

Мы используем postgresql 9.4(тоже неплохо бы установить его локально на свою машину). Connection pool для взаимодействия с базой данных мы берем самый модный и производительный (HikariCP). Кроме того, мы используем специальный плагин, который, когда мы будем генерировать итоговый jar’ник, перенесет все наши данные из webapp в resources/static, как того хочет spring boot. В противном случае вы не сможете увидеть все те веб-страницы, что создадите в папке webapps, когда запустите jar-ник.

Добавим пакет config и создадим в нем класс JpaConfig:

Кроме того, добавим в файл application.properties следующие строчки:

И наконец в Application.java меняем строку инициализации на следующую:

Тем самым мы настроили подключение к СУБД PostgreSQL.

Не забываем создать саму базу данных и простенькую таблицу в ней. Сделать это удобнее всего через PgAdmin.
Создав в ней пустую базу yourapp_data, выполняем скрипт создания таблицы:

Теперь настало время немного заняться начинкой нашего проекта. А именно добавить какую-нибудь сущность БД и научиться с ней работать, получая с клиента данные для ее формирования и отправляя клиенту же данные об уже созданных сущностях.

Создаем пакеты controller, entity, repository, service, utils.

В пакете entity создаем интерфейс:

Аннотации JPA и Hibernate в данном примере использовать не будем, так как эти технологии сильно замедляют работу(запрос может выполняться в 10 раз медленнее, чем на чистом jdbc), а так как у нас нет сильно сложных сущностей, для которых реально может потребоваться ORM, то воспользуемся обычным jdbcTemplate.

Создаем интерфейс репозитория:

Вместо уже упомянутого jdbcTemplate, мы, как видите, используем JdbcOperations, который является его интерфейсом. Нам приходится использовать везде интерфейсы, отделяя их от реализации, так как, во-первых это стильно, модно, молодежно, а во-вторых, spring в нашем случае использует стандартный jdk’шный Proxy для наших объектов, поэтому напрямую инжектить реализацию не получиться, пока мы не введем полноценные аспекты и AspectJ compile-time weaving. В нашем случае этого и не требуется, чтобы не перегружать приложение.

Осталось уже немного. Создаем наш сервис(мы же хорошие разработчики и должны отделить бизнес-логику от логики работы с СУБД?).

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

Это наша реализация Exception’а. Может пригодиться в будущем, хотя и не обязательна, но на нее завязан следующий класс:

Если мы словили такую ошибку в нашем контроллере, то она будет обработана дополнительно в этом методе.
Наконец напишем небольшой классик, который будет формировать структуру данных для передачи на клиент:

Все, со вспомогательными классами закончили. Осталось написать наш контроллер. Он будет простым, как пробка:

В нем два метода — сохранить полученные данные и выдать порцию случайных данных на клиент. Контроллер унаследован от созданного нами ранее ExceptionHandlerController. Обработка исключений написана только как шаблон и нуждается в соответствующей доработки под себя.

Итак, основная часть серверного кода написана, осталось проверить его работу на клиенте. Для этого нужно доработать наш файл index.html и заодно добавить библиотеку jquery в каталог js.
index.html:

Да, UI получился не бог весть каким красивым, но зато с его помощью мы можем проверить работу приложения.
Запустим наш проект. В Intellij Idea это можно сделать через специальную конфигурацию запуска(Spring Boot).
Если все сделано верно, то по адресу localhost:8080 вы сможете увидеть заголовок Hello World, строку ввода и две кнопки. Попробуйте ввести что-нибудь в строку ввода и нажать на кнопку POST. Если после этого вы увидите аналогичный текст ниже поля ввода, то все работает как надо. Теперь останется модифицировать проект под свои нужды, добавить модный UI(например materializecss.com) и творить разумное, доброе, вечное.

Однако рано или поздно вы сотворите желаемое и встанет вопрос о том, как донести ваше детище в массы. Об этом будет вторая часть статьи.

Начнем с малого, но важного.
Даже если проект небольшой, все равно для него потребуется свой домен. Если вы просто обкатываете какую-нибудь идею и не хотите тратить бешеные деньги для регистрации домена на том же godaddy, то можете воспользоваться бесплатной альтернативой: freenom.com

Далее займемся сервером, где все это будет крутиться. Так как проект у нас небольшой, то и сервер нам сгодится небольшой. В идеале хватит VPS. Достать его можно в разных местах, например www.digitalocean.com
Итак, регистрируемся, создаем самый простой дроплет и ставим на него ubuntu (в моем случае это ubuntu 12.04, дальнейшие инструкции буду описывать для этой системы, но на остальных будет примерно то же)

Отлично, у нас есть сервер, пора залить на него наш проект.

Но не будем унывать, поставим себе новую версию:

Теперь настала очередь postgres’а. До этого мы использовали локальную версию на машине разработчика, теперь пришло время поставить СУБД на сервер.

Для этого сначала выполняем магическую последовательность команд:

Далее выполняем команду входа в psql:

И выходим c помощью команды \q

Редактируем файл /etc/postgresql/9.4/main/postgresql.conf, изменив строчку #listen_addresses = ‘localhost’ на listen_addresses = ‘*’
Тем самым мы сможем подключаться к postgresql извне с помощью pgadmin’а. Хотя, конечно, желательно этого избежать в целях безопасности, и когда все будет настроено и отлажено, отключить эту возможность.

Затем редактируем файл /etc/postgresql/9.4/main/pg_hba.conf
Должны быть добавлены две новых строчки и изменена одна строка для 127.0.0.1 следующим образом:

Я намеренно изменил md5 на trust, так как лично у меня были проблемы с запуском проекта, тем самым отключив проверку пароля для заданных адресов. Возможно у вас их не будет.

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

Перезапускаем postgres: и проверяем его работу.

Всё, с настройкой postgres’а закончили, что у нас дальше по сценарию?

В моем случае корневой директорией nginx была /etc/nginx. Там нам в первую очередь потребуется изменить файл /sites_available/default следующим образом:

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

Теперь можно запустить nginx командой service nginx start и затем попробовать запустить наш проект. Он будет доступен по ссылке сайта, либо же, если вы еще не приобрели домен, то по его ip-адресу, без указания порта.

Остался еще один небольшой штрих. Немного неудобно всегда стартовать проект тем способом, который был описан выше. Неплохо бы, чтобы при старте проекта консоль ввода на сервере освобождалась, приложение не закрывалось бы после выхода из ssh-сессии и чтобы где-нибудь велись логи приложения. Сделать это можно с помощью команды nohup. Предварительно создаем bash-скрипт, называя его script.sh:

Прописываем ему право на исполнение:

И запускаем командой:

Все, приложение запущено.

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

Источник

Создание пользовательского стартера с помощью Spring Boot

Краткое и практическое руководство по созданию пользовательских пружинных загрузочных стартеров.

1. Обзор

Разработчики core Spring Boot предоставляют стартеры для большинства популярных проектов с открытым исходным кодом, но мы не ограничиваемся ими.

Эти стартеры позволяют разработчикам избежать длительной настройки и быстро начать разработку. Однако, когда многое происходит в фоновом режиме, иногда становится трудно понять, как аннотация или просто включение зависимости в pom.xml включает так много функций.

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

2. Демистификация автоматической конфигурации Spring Boot

2.1. Классы автоматической настройки

Этот файл сопоставляет имя с различными классами конфигурации, которые попытается запустить Spring Boot. Итак, согласно этому фрагменту, Spring Boot попытается запустить все классы конфигурации для RabbitMQ, Cassandra, MongoDB и Hibernate.

Будут ли эти классы фактически выполняться, будет зависеть от наличия зависимых классов в пути к классам. Например, если классы для MongoDB находятся на пути к классам, mongautoconfiguration будет запущен, и все связанные с mongo компоненты будут инициализированы.

2.2. Пользовательские свойства из файла application.properties

Spring Boot инициализирует компоненты, используя некоторые предварительно настроенные значения по умолчанию. Чтобы переопределить эти значения по умолчанию, мы обычно объявляем их в файле application.properties с определенным именем. Эти свойства автоматически подхватываются загрузочным контейнером Spring.

Давайте посмотрим, как это работает.

Аналогично, значения для других полей в классе можно задать с помощью файла свойств.

3. Создание пользовательского стартера

Основываясь на концепциях, приведенных в разделе 2, для создания пользовательского стартера нам необходимо написать следующие компоненты:

3.1. Модуль Автоконфигурации

Давайте посмотрим на код для обоих классов:

Нам также необходимо добавить файл spring.factories в каталог src/main/resources/META-INF со следующим содержимым:

При запуске приложения класс Greeter Auto Configuration будет запущен, если класс Greeter присутствует в пути к классу. При успешном запуске он заполнит контекст приложения Spring с помощью Greeter Config и Greeter beans, прочитав свойства через GreeterProperties class.

3.2. Создание pom.xml

3.3. Использование стартера

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

Наконец, давайте использовать Greater bean в нашем приложении:

4. Заключение

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

Источник

Русские Блоги

После краткого введения в Spring Boot я расскажу вам, как настроить и запустить два приложения Spring Boot: простое приложение «Hello, World» и чуть более сложное приложение веб-службы Spring MVC RESTful. Обратите внимание, что в примере приложения я использую Spring Boot V1.5.2. Рекомендуется использовать версию 1.5.2 или выше, но эти примеры должны применяться к любой версии выше 1.5.

Предварительное условие

Чтобы полностью усвоить содержание учебника, вы должны хорошо владеть Java ™ Development Kit V8 (JDK 8). Вам также необходимо быть знакомым с Eclipse IDE, Maven и Git.

Чтобы успешно следовать этому руководству, убедитесь, что установлено следующее программное обеспечение:

Прежде чем погрузиться в учебник, я хочу кратко представить Spring Boot.

Что такое Spring Boot?

Вопрос: Spring сложно настроить!

Решение: Spring Boot

Начните знакомство с Spring Boot.Сайт Spring BootВведение к нему более краткое, чем мое введение:

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

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

Все это звучит здорово, правда? Но как именно работает Spring Boot?

Во-первых, он очень напористый

Spring Boot имеетПосмотреть. Другими словами, Spring Boot имеетРазумный дефолт, Таким образом, вы можете использовать эти общие значения для быстрого создания приложений.

Во-вторых, его можно настроить

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

Начните использовать Spring Boot

Starter

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

starterФактически это набор зависимостей (например, Maven POM), и эти зависимости уникальны для типа приложения, представленного стартером.

Справочная страница Spring Boot starterДругие также перечисленыполноСтартер. Вы можете посетить эту страницу, чтобы узнать о POM и зависимостях каждого стартера.

Автоматическая настройка

Если вы разрешите это, Spring Boot будет использовать свой @EnableAutoConfiguration Аннотации для автоматической настройки вашего приложения. Автоматическая конфигурация основана на JAR в пути к классам и способе определения bean-компонента:

Spring Boot über jar

Spring Boot помогает разработчикам создавать приложения, которые можно запускать напрямую. Для этого он упаковывает приложение и его зависимости в исполняемый файл JAR. Чтобы запустить приложение, вы можете запустить Java следующим образом:

Напишите Hello, World!

Теперь вы готовы начать использовать Spring Boot напрямую. Примеры в этом разделе основаны на простом приложении HelloSpringBoot. Вы можете попрактиковаться в этом примере разработки приложения со мной, но если вы хотите сразу же начать использовать код приложения, вы можете скачать его с Github.скачатьЭто.

Приступим к действию и создадим новый проект Maven!

Создать проект Maven

В Eclipse перейдите вFile > New ProjectИ выберитеMaven > Maven Project, Как показано на рисунке 1.

Рисунок 1. Выберите проект Maven

spring boot starter что это. Смотреть фото spring boot starter что это. Смотреть картинку spring boot starter что это. Картинка про spring boot starter что это. Фото spring boot starter что это

Щелкните Далее, а затем еще раз щелкните Далее в следующем диалоговом окне (не показано).

Вам будет предложено выбрать тип архитектуры нового проекта Maven. выберитеmaven-archetype-quickstart, как показано на рисунке 2.

Рисунок 2. Выберите тип архитектуры быстрого запуска Maven.

spring boot starter что это. Смотреть фото spring boot starter что это. Смотреть картинку spring boot starter что это. Картинка про spring boot starter что это. Фото spring boot starter что это

Нажмите кнопку «Далее.

Наконец, введите настройки заготовки, как показано на рисунке 3.

Рисунок 3. Выберите настройки артефакта Maven.

spring boot starter что это. Смотреть фото spring boot starter что это. Смотреть картинку spring boot starter что это. Картинка про spring boot starter что это. Фото spring boot starter что это

Я использовал следующие настройки для приложения HelloSpringBoot:

Нажмите Готово, чтобы создать проект.

Создать POM

Измените POM, созданный мастером New Project, чтобы он выглядел как в листинге 1.

Источник

Создаём свой Spring Boot Starter

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

Для этого имеются всевозможные starter-ы — специальные Maven/Gradle зависимости, которые необходимо только подключить в проект.

Например, подключив в проект всего одну зависимость:

Подобные starter основаны на двух специальных функциональностях Spring Boot — AutoConfigurations и Conditional. Покажем, как использовать данные функциональности на примере создания собственного Spring Boot Starter.

Для начала представим, что мы работаем в компании “Марсианская Почта” (com.martianpost). В нашей компании написано множество приложений, для простоты, ровно два — консольное app-example и веб-приложение web-app-example.

Создадим эти приложения с помощью Spring Initializr.

Исходные коды их можно найти вот здесь.

Т. к. мы “Марсианская Почта”, то нам очень важно в каждом приложении знать точное марсианское время (а точнее MSD — Mars Sol Date) для всех приложений.

Выпустим Spring Boot Starter, решающий эту задачу. В соответствии с документацией выдадим следующие Maven-координаты:

Ну и реализуем наш сервис:

Не забудем про тест:

Обратим внимание, что если мы подключим данную библиотеку, то сервис не создастcя автоматически (хотя аннотация @Service ) — для этого как раз и нужны автоконфигурации.

Создадим автоконфигурацию для нашего модуля:

Данный класс ничем не отличается от обычного класса конфигурации. Его главная задача — найти класс, помеченный @Service и создать его бин.

Но кто найдёт этот класс автоконфигурации? Никто, и нужно дополнительно указать эту автоконфигурацию, чтобы Spring Boot нашёл её:

Да, теперь можно попробовать подключить данный модуль в наше консольное приложение:

Допустим, нам в каждом веб-приложении необходимо сделать, чтобы это время возвращалось RestController-ом. Но проблема в том, что наш стартер может использоваться как в консольных приложениях, так и в веб-приложениях.

Добавим контроллер, который будет создаваться только в веб-приложениях:

Проверим, что наше консольное приложение работает:

Если вывести список зависимостей консольного приложения, то увидим, что spring-mvc там и не присутствует.

А вот подключив в веб-приложение:

И запустив, мы получим:

Магия 🙂 Но доступная каждому 🙂

Целиком пример Вы можете посмотреть на GitHub.

Источник

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

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