Учебное пособие: Criando um CRUD utilizando Quarks Java + REST + CDI + Panache, Гибернация com Postgres (Docker) + Postman
Подпишитесь на мой канал Youtube, различные материалы для Разработчиков: Подпишитесь на мой канал Youtube, различные материалы для Разработчиков:
Введение
Java программистов они “устали” услышать следующие выражения: “Java медленно!”, “Пакет java-это большой”, “время запуска медленно!”. Как способ решить это, Red Hat начала Quarkus , um framework Java nativo do Kubernetes feito sob medida para o GraalVM e OpenJDK горячая точка . O Кварки visa tornar o java платформу, лидер в средах, serverless и Kubernetes , предлагает разработчикам единую модель программирования, реактивного и обязательных
O QuarkusIO , обещает доставить пакеты меньшего размера, с время загрузки extremanente быстро, меньше потребление памяти при условии, что в сочетании с a GraalVM , O Quercus vai realizara compilação Опережающий график (AOT) . На основе лучших стандартов, интегрированной платформы, низкое потребление обработки и время загрузки, это невероятно быстро, в миллисекундах, Quarkus позволяет использовать Java в среде serverless, поддерживая атмосферу гибкой и масштабируемой.
На рисунке ниже, мы можем видеть, сравнение потребления памяти и времени загрузки + время ответ первого запроса, мы можем заметить, что Quarkus + OpenJDK + GraalVM, потребляют меньше памяти и запускаются более быстро, чем в Quarkus + OpenJDK и framework эквивалент на рынке.
Основным отличием от Quarkus в том, что он поддерживает все основные характеристики, то есть вы, не нужно изучать ничего нового. Например, вы можете использовать CDI и JAX-RS , можно также поддерживает расширения, как: Hibernate , Кафка , OpenShift , Kubernetes . На земле облако, в котором containers, Kubernetes, microservices, functions-as-a-service (Рогачев), и собственных приложений для облачных представляют высокие уровни производительности и эффективности, Quarkus приходит с очень интересной альтернативой.
Прежде чем продолжить пост, хотел бы поделиться презентацию, которую я сделал в этом году.
Презентации на Мероприятии Бразилиа Dev Festival 2019
В Сентябре 2019, palestrei на события Discovery Dev Фестиваль , проведенного в Бразилии, – это событие, фаршированные много знаний и network, презентации, доступен ниже:
Практическая часть — Практические занятия (Пошаговое руководство)
Перед началом разработки приложения, необходимо соответствовать минимальным требованиям ниже:
Минимальные требования:
- Вам понадобится IDE например: IntelliJ IDEA , Eclipse , VSCode .
- Установите JDK 8 или 11+
- Установите Apache Maven 3.5.3+ или Gradle
- (Необязательно) — Вы можете скачать GraalVM 19.2.1 для компиляции изначально их применения.
- Щегольская сущность (Возможно, будущей статьи)
- Docker
- Выбор клиента для подключения к Базе данных, например: DBeaver , PGAdmin , Postico (Mac)
- Клиент для выполнения запросов REST: Почтальон или Insomnia .
Дополнительные Инструкции:
- Установка Docker (официальная Документация)
- Instalando Docker нет windows/|: (Youtube, ESR)
- Instalando o Docker без Linux : (Youtube: Советы по Linux)
- Instalando o Docker no Mac: (Youtube: Веллингтон Рогати)
Область приложение
Теперь, давайте создадим приложение, которое будет разрабатываться с Quarkus, с помощью Panache + Hibernate для настойчивости, мы будем использовать CDI para Injeçao de Dependencia e JAX-RS para a API REST.
Мы будем создавать API, чтобы Перечислить, Регистрация, Изменение и Удаление пищи.
В Quarkus имеется Archetype для создания приложения таким образом, чтобы легко, просто запустите команду ниже:
- Совет: убедитесь, что в последней версии на официальном сайте Совет: убедитесь, что в последней версии на официальном сайте
mvn io.quarkus:quarkus-maven-plugin:1.11.1.Final:create \ .com.food \ -еда \ \
$ $ cd кваркус-еда
Давайте понимать, что каждый фрагмент это значит:
$ $ mvn io.quarkus:quarkus-maven-plugin:1.11.1.Final: творить
-DprojectGroupId=br.com.food
-DprojectArtifactId=кваркус-еда
-DclassName=”br.com.food.resource. Продовольственный источник”
-Dpath=”/еда
O Quercus disponibiliza umsite chamado Quarkus.code.io , в зависимости от конфигурации проекта для создания визуальной формы, для проведения конференции, перейдите по ссылке: https://code .quarkus.io/
Сайт: код.quarks.io
Создание проекта — Выполняется команда создания
mvn io.quarkus: quarkus-maven-plugin:1.11.1.Финал:создать \
-DprojectGroupId=br.com.mp \ -DprojectArtifactId=food \ -DclassName="br.com.mp.FoodResource" \ -Dpath="/food"
//Журнал пропусков [ИНФОРМАЦИЯ] Ваше приложение будет доступно на http://localhost:8080 [ИНФОРМАЦИЯ] ———————————————————————— [ИНФОРМАЦИЯ] СОЗДАЙТЕ УСПЕХ [ИНФОРМАЦИЯ] ———————————————————————— [ИНФОРМАЦИЯ] Общее время: 42.305 с [ИНФОРМАЦИЯ] Закончено: 2019-12-12T09:36:11-02:00 [ИНФОРМАЦИЯ] ————————————————————————
Блог в комплекте вы найдете здесь: https://pastebin.com/UfczCUDL
Примечание: Для создания проекта могут занять много времени, поскольку Maven будет проводить загрузки всех зависимостей
Откройте приложение в вашем Предпочтительный IDE
Для этого примера я использую InteliJ, но мне очень нравится Eclipse и Visual code, не стесняйтесь, чтобы выбрать его любимой IDE.
На рисунке ниже, мы можем увидеть структуру проекта (Maven), подчеркнув, что создание файлов в папке Docker, Dockerfile.jvm и Dockerfile.родные, что я хочу поговорить в другой статье. Чуть ниже, мы увидим файл FoodResource, этот класс отвечает на “разоблачение” API.
Управлением первоначальный проект
В терминале выполните команду ниже:
mvn compile quarkus:разработка
Результат выполнения:
Возможно, при первом запуске компилятор будет проверять, существует ли зависимость для загрузки, как в примере ниже.
[ИНФОРМАЦИЯ] Поиск проектов… [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] —————————< br.com.mp:еда >————————— [ИНФОРМАЦИЯ] Создание продуктов питания 1.0-МОМЕНТАЛЬНЫЙ СНИМОК [ИНФОРМАЦИЯ] ——————————– [ банка ]——————————— [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] — maven-ресурсы-плагин:2.6:ресурсы (по умолчанию-ресурсы) @ еда — [ИНФОРМАЦИЯ] Использование кодировки UTF-8 для копирования отфильтрованных ресурсов. [ИНФОРМАЦИЯ] Копирование 2 ресурсов //ЖУРНАЛ ПРОПУЩЕН [ИНФОРМАЦИЯ] —————————< br.com.mp:еда >————————— [ИНФОРМАЦИЯ] Создание продуктов питания 1.0-МОМЕНТАЛЬНЫЙ СНИМОК [ИНФОРМАЦИЯ] ——————————– [ банка ]——————————— [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] — maven-ресурсы-плагин:2.6:ресурсы (по умолчанию-ресурсы) @ еда — 2019-12-12 15:12:19,730 ИНФОРМАЦИЯ io.quarks Quarkus 1.0.1.Финал стартовал за 0.735секунды. Прослушивание: http://0.0.0.0:8080 2019-12-12 15:12:19,740 ИНФОРМАЦИЯ io.quarkus Активирован разработчик профиля. Активировано живое кодирование. 2019-12-12 15:12:19,741 ИНФОРМАЦИЯ io.quarkus Установленные функции: [cdi, resteasy]
Полный журнал запуска приложения: https://pastebin.com/pnLdVYsc
В конце Журнала, отображается URL-адрес для доступа с помощью браузера.
io.quarks Quarkus 1.0.1.Финал стартовал за 0.735секунды. Прослушивание: http://0.0.0.0:8080
Вы можете получить доступ к API через адресов: http://localhost:8080, http://0.0.0.0:8080 или http://127.0.0.1:8080.
Чтобы перейти на страницу, просто нажмите на адрес, предоставленного в терминал или просто скопировать и вставить в ваш браузер, как показано в примере ниже:
Тестирование API/food, через браузер
URI наш API установлен первоначально в классе FoodResource.java, путь:/food
Откройте браузер и введите адрес: http://localhost:8080/food, как на изображении ниже:
Экземпляр Postgresql в Docker
Для хранения информации, пойдем una экземпляр Postgresql, используя Docker, для этого необходимо иметь Docker установлен и выполнить команду в списке ниже:
запуск docker –имя postgres-food -e” -p 5433:5432 -v ~/developer/PostgreSQL:/var/lib/postgresql/data -d postgres
Примечание: мне Пришлось изменить порт по умолчанию 5432 на 5433, уже был другой экземпляр, работающих здесь.
Мы будем тестировать соединение с Базой данных, в моем случае, я, с помощью DBeaver 6.1.0, однако, существует множество других приложений для подключения к Базе Данных PostgreSQL, ниже, ниже испытание на подключение к базе данных:
В клиенте SQL, мы откроем, что схема Базы данных, и мы понимаем, что даже пустой, не существует никаких таблица создана.
Возвращаясь к нашей применения
Возвращайтесь в свою IDE и добавьте следующие зависимости для PanacheEntity и зависимость Postgresql, данные должны быть добавлены в файл pom.xml (В корне проекта).
ио.кварки кваркус-гибернация-орм-щегольство
ввод-вывод.кварки quarkus-jdbc-postgresql
io.кварки quarkus-resteasy-jsonb
Отель Panache Entity призван облегчить осуществление сохранения слоя приложения. Кроме того, framework-res различные методы, такие как Count, ListAll(), findById, persist, delete, уже реализованы, как показано ниже код
Exemplo do PanacheEntity (сайт Retirado do: https://quarkus.io/guides/hibernate-orm-panache )
//создание персоны Person Person(); ; .из(1910, месяц. 1 ФЕВРАЛЯ); .Жив;
//persist it person.persist();
//обратите внимание, что после сохранения вам не нужно явно сохранять свою сущность: все//изменения автоматически сохраняются при фиксации транзакции.
////проверьте, является ли он постоянным, если(person.IsPersistent()){//удалить этого человека.удалить(); }
////получение списка всех физических лиц List.listAll();
//поиск конкретного человека по идентификатору .findById(PersonID);
//поиск списка всех живых людей.список(“статус”, Статус. Живой) ;
//подсчет всех людей long.count();
//подсчет всех живых людей long.count(“статус”, Статус. Живой) ;
//удалить всех живых людей Person.удалить(“статус”, Статус. Живой) ;
////удалить все лица Person.Удалить все();
Примечание: PanacheEntity это очень интересно, но я лучше буду объяснять в следующей статье.
Возвращаясь к реализации шаблона класса (Entity)
Может быть, крикнуть классу (Entidade): Food.java , dentro da pasta br.com.food.entity.
Класс: Food.java
пакет br.com.food.entity;
импорт ввода-вывода.кварки.впасть в спячку.орм.щегольство. База данных PanacheEntityBase;
импортируйте javax.persistence. *; импорт java.util. Объекты;
@Entity public class Food расширяет базу данных PanacheEntityBase {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column private String name; @Column private Double calories;
//Опустить }
Настройка подключения Базы данных в проект
Поиск файла application.properties ” в папке resources и добавьте следующие параметры:
кваркус.источник данных.url:postgresql://localhost:5433/food .postgresql. Водитель
кварки.переход в спящий режим-orm.database.generation- и- творить
Ао исполнитель nossa aplicaçao, nos deparamos com o seguinte проблема: Вызвана: org.postgresql.util. PSQLException: ФАТАЛЬНЫЙ: база данных “еда” не существует
Вызвано: org.postgresql.util. PSQLException: ФАТАЛЬНЫЙ: база данных “food” не существует в org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2468) в org.postgresql.core.v3.QueryExecutorImpl.readStartupMessages(QueryExecutorImpl.java:2587) в org.postgresql.core.v3.QueryExecutorImpl.(QueryExecutorImpl.java:134) в org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:250) в org.postgresql.core. ConnectionFactory.openConnection(ConnectionFactory.java:49) в org.postgresql.jdbc. PgConnection.(PgConnection.java:195) в org.postgresql. Driver.makeConnection(Driver.java:458) в org.postgresql. Driver.connect(Драйвер.java:260)
Решение: Создание базы данных в Postgresql, через ClienteSQL
Приложение работает с Базой Данных, настроенной
Возвращаясь к нашей IDE, мы будем запускать команду, которая будет запускать наше приложение:
$ $ mvn компилирует quarkus:dev
[ИНФОРМАЦИЯ] Поиск проектов… [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] ————————–< br.com.еда:еда >————————– [ИНФОРМАЦИЯ] Создание продуктов питания 1.0-МОМЕНТАЛЬНЫЙ СНИМОК [ИНФОРМАЦИЯ] ——————————– [ банка ]——————————— [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] — maven-ресурсы-плагин:2.6:ресурсы (по умолчанию-ресурсы) @ еда — [ИНФОРМАЦИЯ] Использование кодировки UTF-8 для копирования отфильтрованных ресурсов. [ИНФОРМАЦИЯ] Копирование 2 ресурсов [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] — maven-compiler-плагин:3.8.1:компиляция (по умолчанию-компиляция) @ food — [ИНФОРМАЦИЯ] Обнаружены изменения – перекомпиляция модуля! [ИНФОРМАЦИЯ] Компиляция 2 исходных файлов в/home/marcus/Estudo/Quarkus/food/target/classes [ИНФОРМАЦИЯ] [ИНФОРМАЦИЯ] — quarkus-maven-плагин:1.0.1.Финал:dev (по умолчанию-cli) @ food — Прослушивание транспортного dt_socket по адресу: 5005 2019-12-12 16:44:24,885 ПРЕДУПРЕДИТЬ org.heb.eng.jdb.spi. SqlExceptionHelper Код предупреждения SQL: 0, SQLState: 00000 |/2019-12-12 16:44:24,891 предупреждать org.heb.eng.jdb.spi. SqlExceptionHelper таблица “еда” не существует, пропуск 2019-12-12 16:44:25,135 ИНФОРМАЦИЯ io.кварки Quarkus 1.0.1.Финал стартовал за 1.715секунды. Прослушивание: http://0.0.0.0:8080 2019-12-12 16:44:25,136 ИНФОРМАЦИЯ io.quarkus Активирован разработчик профиля. Активировано живое кодирование. 2019-12-12 16:44:25,136 INFO io.quarkus//Установленные функции: [agroal, cdi, hibernate-orm, hibernate-orm-panache, jdbc-postgresql, narayana-jta, resteasy]
Obversação 1: Так что завершить работу приложения, мы заметили, что в таблице Food был создан в базе данных.
Obvervaçao 2: Caso nao quero o comportamento de criação automatica do banco de dados, basta comentar ou remover a linha:-and-create”, de dentro do arquivo do application.свойства.
Проверки, если таблица была создана в Базе Данных.
Я надеюсь, что наслаждаюсь этой статье.
Реализация простой, бизнес-класса
Крик ума классная чамада де FoodController.java , dentro da pasta br.com.food.controller. Этот класс будет составлять содержать бизнес-правило простое.
@@ApplicationScoped общедоступный класс FoodController {
public Food update(Long id, Food food) { Food foodEntity = Food.findById(id); if (foodEntity == null) { throw new WebApplicationException("Food with id of " + id + " does not exist.", Response.Status.NOT_FOUND); } foodEntity.setName(food.getName()); foodEntity.setCalories(food.getCalories()); return foodEntity; } /** * This method is main purpose to show simple "Business" example * @param food * @return */ public boolean isFoodNameIsNotEmpty(Food food) { return food.getName().isEmpty();
} }
Реализация FoodResouce.java
Класс FoodResource, несет ответственность за предоставление API с методами для регистрации, редактирования, удаления и список всех продуктов, зарегистрированных.
пакет br.com.food.resource;//ОМИТИДО
@@Путь(“/еда”) @Производит(медиатип.APPLICATION_JSON) @Потребляет(тип среды.APPLICATION_JSON) общедоступный класс FoodResource {
@Inject private FoodController foodController; @GET public ListfindAll() { return Food.listAll(); } @POST @Transactional public Response create(Food food) { Food.persist(food); return Response.ok(food).status(201).build(); } @PUT @Path("{id}") @Transactional public Response update(@PathParam("id") Long id, Food food) { if (foodController.isFoodNameIsNotEmpty(food)) { return Response.ok("Food was not found").type(MediaType.APPLICATION_JSON_TYPE).build(); } Food foodEntity = foodController.update(id, food); return Response.ok(foodEntity).build(); } @DELETE @Path("{id}") @Transactional public Response delete(@PathParam("id") Long id) { Food foodEntity = Food.findById(id); if (foodEntity == null) { throw new WebApplicationException("Food with id " + id + " does not exist.", Response.Status.NOT_FOUND); } foodEntity.delete(); return Response.status(204).build(); }
}
Примечание: Обратите внимание, что можно выполнить операцию с сохранение как в уровне Resource(API), так и на бизнес-класс или даже в классе Data Access Object — DAO .
Тестирование API через Почтальон
Откройте Почтальон, выберите адрес электронной ПОЧТЫ и оцифруйте URL: http://localhost:8080/food . Кроме того, добавьте Body с данными, как показано на рисунке ниже:
Членство другой еды в Почтальон
Перечислив все продукты в Почтальон
В Почтальон, cree другой requisiçao типа Gate введите url-адрес: http://localhost:8080/food, результатом будет список всех продуктов, зарегистрированных в базе данных, как показано на рисунке ниже:
Почтальон — Обновление объекта
Чтобы обновить описание и/или калорийности пищи, просто создайте новый запрос типа “PUT”, добавьте в конец URL-кода (ID) из пищи, которую изменен. Не забудьте заполнить body, который содержит JSON-объект изменен.
Проверка записей в Базе Данных
Удаление пищи через Почтальон
С перечнем всех продуктов питания через Почтальон
В последнем тесте, будут перечислены все продукты питания, которые зарегистрированы в базе данных.
Завершение
Это моя первая статья и я надеюсь, что вам понравилось, пожалуйста, не стесняйтесь предлагать, критиковать или хвалить. Обнимаю и до следующего.
Исходный Код
Исходный код доступен по адресу: Исходный код доступен по адресу:
Оригинал: “https://dev.to/marcuspaulo/tutorial-criando-um-crud-utilizando-quarkus-java-rest-cdi-panache-hibernate-com-postgres-docker-postman-5bk6”