Tutorial: Quarkus do Zero até o Deploy no Heroku, utilizando Quarkus Java + REST + CDI + Panache, Hibernate com Postgres + Postman

Marcus Paulo
7 min readMay 6, 2020

--

https://www.flickr.com/photos/marcus-paulo/3722826528/

Se inscreva no meu canal do Youtube, vários conteúdos para Desenvolvedores: https://www.youtube.com/channel/UCzoyY_hIVs53dQUeY4yVkhA

Canal do Youtube

Introdução

Olá pessoal! vamos para o terceiro post sobre o Quarkus, caso você nunca tenha ouvido falar dele, sugiro uma leitura na Documentação Oficial e também nas duas publicações que já escrevi.

Publicações:

  • Tutorial: Criando um CRUD utilizando Quarkus Java + REST + CDI + Panache, Hibernate com Postgres (Docker) + Postman — Linkedin Post | Medium
  • Tutorial: Quarkus — Simplificando o Hibernate utilizando Panache — criando uma aplicação simples utilizando Quarkus Java + REST + CDI + Panache — Linkedin | Medium

Objetivo

Criar uma aplicação simples (CRUD) do zero, utilizando o Quarkus, CDI, Panache, Hibernate Validator, Postgres chegando até um deploy no Heroku. O Heroku é um serviço de Cloud, denominado de PAAS (Platform As A Service), em resumo, a ideia é que você não se preocupe com infraestrutura. Vamos para os pré-requisitos para desenvolver a aplicação.

Pré-requisitos:

Instruções Adicionais:

Escopo da aplicação

Criar uma API Simples, que será responsável por Listar, Cadastrar, Editar e Remover produtos. Todos esses dados serão salvos no banco de dados PostgreSQL.

Iniciando o Desenvolvimento

A criação da aplicação poderá ser através do site https://code.quarkus.io/, ou através do comando abaixo (Maven Archetype):

mvn io.quarkus:quarkus-maven-plugin:1.4.2.Final:create \
-DprojectGroupId=br.com.mp.product \
-DprojectArtifactId=quarkus-product \
-DclassName="br.com.mp.product.api.ProductResource" \
-Dpath="/products"

No arquivo pom.xml, vamos adicionar as bibliotecas de persistência e o drive para o Banco de dados Postgres:

Em seguida, crie a entidade Product.java, que será a classe de mapeamento do Hibernate + Panache com o Banco de dados.

Hibernate Validator, veja a anotação @NotBlank com uma mensagem indicando que não é possível salvar um produto, caso o nome e/ou a marca estejam sem conteúdo.

Segundo passo, vamos criar a classe ProductRepository.java, que implementa PanacheRepository, a vantagem é que essa classe possui vários métodos que facilitam a implementação da camada de persistência, como o save, findById, delete, dentre outros.

Por fim, vamos implementar a classe ProductResource.java, que será responsável por prove os serviços REST da nossa aplicação:

Banco de Dados

No arquivo application.properties (dentro da pasta resource), configure o acesso ao banco de dados para o ambiente de desenvolvimento, conforme o exemplo abaixo.

Atenção: a última propriedade destrói e cria o banco de dados automaticamente a cada vez que a aplicação é iniciada, o ideal é utilizar alguma ferramenta de migração de dados, como o Flyway ou outra estratégia. Se vocês quiserem um post sobre o Flyway, deixem nos comentários.

Executando uma instância do Postgresql no Docker (nesse post, apenas para desenvolvimento local)

Iniciando uma instância do Postgresql, utilizando o Docker, para isso, é necessário ter o Docker instalado e então executar o comando listado abaixo:

# Criando uma instância do Postgressql através do Docker

docker run --name postgres-product -e "POSTGRES_PASSWORD=postgres" -p 5432:5432 -v ~/developer/PostgreSQL:/var/lib/postgresql/data -d postgres

Para executar a aplicação, basta executar o seguinte commando:

mvn compile quarkus:dev

ou, se você estiver no IntelliJ, pode executar pela área do Maven, conforme a imagem abaixo:

Após isso, abra o navegador no endereço: http://localhost:8080 e você verá a seguinte página:

Testando a aplicação com o POSTMAN

Listando os produtos cadastrados:

Cadastrar um produto:

Observação: Para o post não ficar muito extenso, o arquivo do Postman está dentro do projeto no Github, com todos os métodos (listar, cadastrar, alterar e remover).

Hibernate Validator

No exemplo a seguir, vamos cadastrar um produto, deixando o nome sem conteúdo, conforme a imagem abaixo:

A própria validação do Hibernate Validator retornou um erro, informando que o Nome do produto não pode ficar sem conteúdo.

Github

Crie um repositório no Github e envie (“commit”) o seu código para lá, esse passo é necessário para realizarmos o deploy no Heroku.

Deploy no Heroku

Criar uma conta no Heroku é super simples, basta seguir os passos do link: https://signup.heroku.com/, lembrando que a conta é gratuita, caso goste, você pode contratar outros planos.

Limitações do plano gratuito:

  • A aplicação entra em estado de repouso, caso não receba uma requisição em 30 minutos
  • No plano gratuito, as máquinas têm uma configuração mais modesta

Na página inicial do Heroku, clique no botão NEW e em seguida Create new app.

No passo seguinte, escolha um nome para o projeto.

Vá até a aba Deploy e conecte com a conta do Github, conforme a imagem abaixo:

Instruções:

  1. Digite o nome do seu repositório no Github, no exemplo: quarkus-product
  2. Clique no botão Search
  3. Clique no botão Connect

Você pode habilitar o Deploys automáticos, ou seja, assim que tiver um “commit” no Github, uma nova versão será disponibilizada:

Antes de clicar, no botão Deploy Branch, precisamos de duas configurações para executar no Heroku:

Crie o arquivo system.properties (raiz do projeto) e adicione a versão do Java, conforme o exemplo abaixo:

java.runtime.version=11

Crie o arquivo Procfile (raiz do projeto) e adicione a seguinte linha para a execução do projeto no Heroku:

web: java -Dquarkus.http.port=$PORT $JAVA_OPTS -jar target/*-runner.jar

Pode “commitar” os arquivos para o Github, porém, sua aplicação não estará funcionando ainda.

Configuração do Banco de dados no Heroku

Vá até a aba Resource e adicione um Add-ons, do Heroku Posgres

Confirme a opção abaixo:

Após isso, o banco de dados estará disponível, clique no Heroku Postgres, você será redirecionado para a página que contém a configuração do banco de dados.

Página inicial do Heroku Postgres:

Vá até a aba Settings e clique no botão View Credentials, para exibir as configurações do banco de dados

Os dados da configuração são exibidos na imagem abaixo, por questões de segurança os dados de acesso foram omitidos.

Volte para o Dashboard do Heroku, vá até a aba Settings e procure a opção Config Vars, clique no botão Reveal Config Vars, conforme a imagem abaixo:

Configure as seguintes variáveis com seus respectivos valores, lembrando que as configurações, estão na imagem acima:

  • DATABASE_HOST
  • DATABASE_NAME
  • DATABASE_PASSWD
  • DATABASE_PORT
  • DATABASE_USER

O último passo é configurar o acesso da aplicação, como uma boa prática de segurança, você nunca deve “commitar” dados de produção ou dados sensíveis para o github, já que alguém mal-intencionado pode utilizar os dados de forma abusiva. A melhor forma para evitar qualquer tipo de problemas é configurar variáveis de ambiente.

Arquivo que contém as configurações do banco de dados de desenvolvimento e produção application.properties:

Após isso, faça um commit no Github e aguarde o Deploy no Heroku. (caso tenha configurado o Deploy Automático), se não, basta clicar no Botão Deploy lá no Heroku.

Testando nossa aplicação no Heroku

Cadastrando um produto através do Postman no Heroku

Listando os produtos cadastrados (no Heroku)

Conclusão

Espero que vocês tenham gostado, sinta-se à vontade para sugerir, criticar ou elogiar. Um grande abraço e até a próxima.

Código-Fonte

O código-fonte está disponível no endereço: https://github.com/marcuspaulo/quarkus-product

--

--