Ola neste artigo você ira aprender a criar uma aplicação для создания, чтения, обновления и удаления usando Spring Webflux с данными сохраняются в базу MongoDB и наконец, размещенного на Heroku!
Репозиторий проекта создан: https://bit.ly/pokedex-reativo
К концу этого учебника вы будете иметь свой собственный pokedex, и вы можете обновлять, удалять и создавать свои покемоны в своем собственном хранилище, с понятия реактивности с помощью Events Streams и Конечные Функциональные просто и обычно, проект очень довольна, как я есть, как портфель! Понравилось? Итак, начнем… (ɔ っ っ‿) ɔ
У вас должен быть установлен перед тем, как начать:
- JDK 8 или 9
- IDE для разработки, я буду использовать IntelliJ
- O Интерфейс Heroku CLI
- Владеть Maven 3 с его переменные среды, настроенные
- Почтальон
Очень важно, что у вас Maven 3, так как Heroku CLI работает только в этой версии… Если вы не имеющей Нажмите здесь, и установить maven на правильную версию, чтобы сделать его применение расти правильно 😉
Теперь вы должны получить доступ к веб-сайт Spring Initialzr , и выбрать следующие зависимости:
- Пружинное Реактивное полотно
- Spring Data Reactive MongoDB
- Встроенная база данных MongoDB
Нет группы usaremos: com.pokedex
Нет артефакта: реактивный веб
Пакет-это имя генерируется автоматически!
После выполнение всех переменных в вашем Spring Initializr должен выглядеть примерно так:
Prontinho, теперь просто нажмите кнопку GENERATE CRTL+
, и spring initializr будет генерировать файл в ZIP, и вы должны извлечь этот файл в каталогов, которые вы можете найти после .
После извлечения файла вы должны открыть свой IDE, в случае, если я открою IntelliJ и cliar в import project
Cliccando в import project вы увидите всех своих каталогов, просто найдите, где проект, который вы загрузили Spring Initialzr, и импортировать его, нажав кнопку ok
Появится окно с двумя пунктами, нужно выбрать: Maven , потому что наш проект будет импорт через шаблон, который уже существует Теперь вы можете нажать кнопку finish будет загружен весь свой проект с помощью переменных среды!:p
Для нашего приложения расти правильно, нужно положить в order прицеп зависимость воскресенье embbeded, он должен остаться до
org.springframework.boot
spring-boot-starter-webflux
, ваш pom.xml будет выглядеть следующим образом:
баста exlcuir o <область применения> тест применения>
e colocar зависимость от встроенного логотипа mongo em seguida. применения>
Isso fará com que nossa aplicação suba na ordem correta, se essa dependency estiver depoisual estava, nossa aplicação não iria subir no servidor, pois a mesma não iria encontrar, sua depedendy deverá ficar da seguinte forma: <зависимость>
<Идентификатор группы>de.flapdoodle.embedded группы>
de.flapdoodle.embedded.mongo
группы>
Давайте посмотрим, senossa приложение растет, на канале youtube womakerscode у нас есть видео, где объясняем на сервер Netty, если у вас возникнут сомнения, только дать заглянули на там . Поднявшись приложения мы видим наш сервер в действие на порт 8080.
Буду ставить “hello world womakerscode” по умолчанию в классе main()
Você tera que que no console nosso System.out.println
покажет сообщение, а также будет помечен, дверь, что наше приложение находиться
Для проведения тестов в базе данных, нам нужно, что наше приложение имеет все данные, чтобы быть спасенными, а также, что методы MongoDB найдены. В нем будут спасены наши переменные.
Для создания package щелкните правой кнопкой мыши, в com.pokedex.reactive web > Создать > Пакет > com.pokedex.reactiveweb. модель > введите
Внутри него создайте новый класс с имя Pokemon , внутри этого класса будут размещены сведения, что покемоны будут, такие как Id, Имя, Силы etc… Внутри этого класса поместите:
Теперь только нужно gear геттеры и сеттеры, , boolean equals , хэш-код и toString , você pode fazer tudo isso apertando ALT + INSERT
> средство получения/установки > equals() хэш-код() > toString() > Переопределение методов > Конструктор
Вы также можете делать один и затем другой, IntelliJ или IDE, который вы используете будет генерировать все эти методы для вас!
В хранилище, где находится сохранение данных, чтобы создать его, щелкните правой кнопкой мыши, в com.pokedex.reactive web > Создать > Пакет > com.pokedex.reactiveweb. репозиторий > входить
В течение этого пакет будет создан интерфейс имя PokemonRepository
Интерфейс является тип абстракции, которые мы используем, чтобы указать тип поведения, что классы должны реализовать
В этом интерфейсе поместите следующий код:
Spring Data уже значительно облегчает нашу жизнь, поэтому единственное, что мы должны поставить в этом интерфейсе-это спецификация, что она будет работать с объектом, Pokemon String.
Если вы нажмете на ReactiveMongoRepository
Да теперь мы можем Инициализировать нашей базы данных (≖ ʖ≖) 👌
Мы используем Mongo Embeded, таким образом, не требуется создавать учетную запись или т, это все место на нашей машине.
В классе Main() мы создаем разговора из нашей базы данных, с помощью CommandLiner, что это функциональный интерфейс, который получает аргументов в цепи.. то же самое должно быть отмечено с @Bean для spring boot понять, что это должен быть обработан, в любом случае, результат должен быть следующий код:
Здесь мы видим что-то другое, мы не принося стандартные методы (findAll, findById etc) почему мы работаем с встроенной базой данных, но если вы хотите использовать Mongo Atlas например, ReactiveMongoOperations создает это ряд методов для тебя.
В этом коде .flatMap запрос findAll и печатает данные, и thenMany делает это слишком просто, что асинхронно, и то, subscribe печатает на экране также
Теперь, если выполним то мы увидим, что база данных вырос, и все введенные данные будут показаны на экране, вы будете иметь что-то вроде:
Контроллер-это наш класс controller, на ней будут наши методы создания, обновления, удаления и чтения наших покемонах.
Чтобы создать его, щелкните правой кнопкой мыши, в com.pokedex.reactive web > Создать > Пакет > com.pokedex.reactiveweb. контроллер > ввод И повторить этот же процесс, чтобы создать класс,
Теперь bora создать методы, которые мы уже прибыв на конечный результат (•◡•)/
Ищу все покемоны
Теперь вы должны создать экземпляр, и внутри него будет иметь метод, чтобы привести все покемоны, будет выглядеть следующим образом:
Bucando Pokémon id
Искать по id, colocaque метод в экземпляре, равно предыдущую:
Вы, что этот способ является Mono тип покемонов? Это означает, что мы хотим только, что 1 id не называется, и если этот идентификатор не найден, приносим ответ HTTP.
В defaultIfEmpty используется, когда Код вызывается в сущности, пуст, он вернет статус NOTFOUND
Помните, что .map () должна возвращать функция синхронного и результат будет захвачен в редакторе Моно, так как findById возвращает Mono
Создание и сохранение нового Покемона
Чтобы создать новый и сохранить покемонов просто ввести код ниже
Возвращает Mono, это то, что возвращается в хранилище.
Обновление Pokémon
Теперь мы будем объединять все, что вы видели здесь, чтобы обновить Покемонов. Чтобы обновляем покемонов, то мы получим идентификатор экземпляра покемонов и новые значения, которые будут обновлены.
Давайте начнем поиск по id, и если он найден будет обновлен в отличие встретят состояние NOTFOUND
Вторая часть кода оператора map для этого преобразования, и поэтому, если Моно-пустой возвращается с defaultEmpty он вернет статус NOTOFUND, этот блок кода также может быть сделано с помощью if/else, но так что мы сделали режима объявление
Удаление Покемонов
Метод exlcuir похож на предыдущие, также, чтобы удалить, когда создать метод, который удаляет покемонов, по id:
И другой метод, чтобы удалить ВСЕ Покемоны
Prontinho, теперь у нас полный CRUD, где мы создали так, реактивной и функциональной, теперь нам нужно создать наш Event Stream (часть прохладно/)
Поток событий Criando um ᕙ(`▿)ᕗ
Для создания нашего метода событий в контроллер, нам нужно создать класс, где находятся атрибуты, события, для этого внутри package model создайте класс PokemonEvent , с следующий код:
`
public class PokemonEvent { private Long eventId; private String eventType; }
`
Da mesma forma que foi feito com o classe Pokémon dentro do package Model logo asima, só vai precisar gears getter e setters , логические значения , хэш-код , e o toString , você pode fazer tudo isso apertando ALT + INSERT > средство получения/установки > equals() хэш-код() > toString() > Переопределение методов > Конструктор
showww, сейчас мы вернемся в класс PokemonController , и создать наш метод событий, который будет выглядеть следующим образом:
`
@GetMapping(value = "/events", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public FluxgetPokemonEvents() { return Flux.interval(Duration.ofSeconds(5)) .map(val -> new PokemonEvent(val, "Product Event") ); }
`
The interval приносит столько секунд, что мое событие будет показано, в этом случае 5 на 5 секунд, событие генерируется новый!
Конечные точки Эстамос-квазе-акабандо, агора-со-фальта-тестар-носсос ( ~ ʖ °)
Чтобы протестировать наше приложение, давайте посмотрим, если все будет расти правильно, для этого перейдите в метод main() и взялись ним, и следить в консоли, чтобы увидеть, если не возникает никаких ошибок, ответ должен вернуться, более или менее так:
Конечные точки Agora bora pro postman testar os
Ищу все Покемоны
Первый метод, который мы будем тестировать GET, которая будет приносить все покемоны, которые были сохранены в почтальон гнев принести следующие результаты:
Посмотрите, что в поиске мы решили GET, потому что мы “собирание” всех покемонами, чтобы проверить, слишком как: “PUT”, “POST” … etc, просто мы изменим эту опцию, то там bora
Поиск Покемонов по id
Искать по id, а просто скопировать и вставить код, который был создан в ответ действительно ПОЛУЧИТЬ
Вставив новый Покемон
В родном postamn изменить запрос для POST и в Body выбрать raw > JSON потому что мы хотим сохранить в формате json, а затем введите:
`
{ "nome": "IbySaur", "categoria": "Semente", "habilidades": "OverGrow", "peso": 13.0 }
`
После этого, нажмите кнопку SEND и ваш покемон будет сохранен! Должно вернуть STATUS 201 * что показывает, что он был успешно создан, чтобы в этом убедиться, давайте вернемся узел GET , чтобы скопировать и вставить код, сгенерированный, что он покажет наш покемонов создана..
Id, не нужно размещать, поскольку он генерируется автоматически с помощью MongoDB
Удаление Покемонов
Сейчас мы будем удалять методы deleteALL deleted , так в почтальон будем изменить запрос для DELETE
Посмотрите, что я помещаю код в некоторых покемонов, которые я хочу удалить
Могу ли я взять этот код, он будет exlcuir ВСЕ ПОКЕМОНЫ
Мы видели, что наш CRUD в схеме уже, то есть, работает хорошо lindão… С нашей запущенное приложение еще проверим events stream, для этого перейдите браузер, если его предпочтения и введите:
http://localhost:8080/pokemons/events
И вы увидите, как волшебство происходит каждые 5 секунд будет на возвращение событие покемонами
Если открыть эту же запрос в другом окне, вы увидите, что в events stream позволит другой запрос вызова не дожидаясь, пока предыдущий закончит, это вызывает не-сжимать, типичные Spring Webflux.
Shoooow теперь у вас уже есть приложение, topzera, bora подняться она в облаке?
Para subir nasa aplicação, precisamos colocar o plugin do heroku no nosso pom.xml:
`
... ... com.heroku.sdk heroku-maven-plugin 3.0.2
`
Теперь перейдите в папку приложения, с помощью терминала (я буду использовать gitbash) , и ввести heroku login
, чтобы получить доступ к своей учетной записи в heroku
Появится окно, так чтобы вы:
Нажмите кнопку Войти, и вы можете закрыть это окно и что вы будете с логином активным в Heroku!
Теперь только ждать, терминал обработки
Депо для терминала каррегара, иремос создает карту для госпиталя носа апликас, фаремос иссо ком о командо heroku create
И мы почти там, app был создан, в терминале он будет тебя получить ссылку это сообщение:
Мы готовы pro Deploy
Se seu aplicativo é um standalone (e, portanto, requer um tipo de processo), você pode implantar com este comando: mvn clean heroku:развернуть
Только ждать segundinhos и проверить журналы…
Если сообщение BUILD SUCESS появляться, значит, что все получилось, можете вздохнуть с облегчением!
PARABÉNSSS его применение subiuuu
Пара асессар баста диджитар Открытый чемпионат heroku
Spring Webflux-это модуль очень здорово в SpringBoot, он, кроме того, мы создаем CRUD мы можем создать последовательность событий, но это не означает, что мы должны всегда использовать приложения, реагирующие, все зависит от вашего сценария и жизнеспособность
…
И если вы достигли здесь, поздравляем, вы победитель , я считаю, что нет ничего более recopensador, что смотрите наше приложение и работает, не так ли? Тогда поделитесь тоже, и разместите на github для все больше и больше людей могли узнать так же, как вы! ʕ•ᴥ•ʔっ
O código desta aplicação está no meu Github -> O código desta aplicação está no meu Github ->
Ссылки: Heroku DevCenter Канал Youtube Michelli Brito
Увидимся в следующем, дайте likesss и делить, и просматривать другие детали womakerscode тех, кто хочет следовать за мной в сетях socías @anabneri #tamojunto
Оригинал: “https://dev.to/womakerscode/criando-seu-pokedex-com-spring-webflux-mongodb-deploy-no-heroku-21f5”