Repositório que estará sendo utilizado como exemplo
digitalinnovationone / santander-dev-week-2023-api
RESTful API da Santander Dev Week 2023 construída em Java 17 com Spring Boot 3.
Santander Dev Week 2023 Java API
RESTful API da Santander Dev Week 2023 construída em Java 17 com Spring Boot 3.
Principais Tecnologias
- Java 17: Utilizaremos a versão LTS mais recente do Java para tirar vantagem das últimas inovações que essa linguagem robusta e amplamente utilizada oferece;
- Spring Boot 3: Trabalharemos com a mais nova versão do Spring Boot, que maximiza a produtividade do desenvolvedor por meio de sua poderosa premissa de autoconfiguração;
- Spring Data JPA: Exploraremos como essa ferramenta pode simplificar nossa camada de acesso aos dados, facilitando a integração com bancos de dados SQL;
- OpenAPI (Swagger): Vamos criar uma documentação de API eficaz e fácil de entender usando a OpenAPI (Swagger), perfeitamente alinhada com a alta produtividade que o Spring Boot oferece;
- Railway: facilita o deploy e monitoramento de nossas soluções na nuvem, além de oferecer diversos bancos de dados como serviço e…
Diferença entre nuvens
O Railway tem um interpretador para aplicações Spring Boot, então pelo repositório fornecido ele identifica o arquivo .jar necessário para aplicação.
O Render não, o que ele nos permite é gerar um serviço web, como um API, por exemplo, mas precisamos instruí-lo a montar o ambiente necessário para que a aplicação seja executada, faremos isso através de um Docker, mas não se assuste, é bem simples.
Caso você desconheça esta tecnologia, saiba mais através deste artigo.
Passo a passo
Se busca por rapidez e eficiência recomendo seguir por este caminho:
[PT-BR] Subindo um Docker Compose na nuvem Render
Lucas de Moraes ・ Mar 20
- Alterar o
ddl-auto
no perfil de produção:
📂santander-dev-week-2023-api
┣ 📂.gradle
┣ 📂.idea
┣ 📂gradle
┣ 📂src
┃ ┗ 📂main
┃ ┗ 📂java
┃ ┗ 📂resources
┃ ┗ 📛application-dev.yml
┃ ┗ 📛application-prd.yml ←
┣ 🚫.gitignore
┣ 🐘build.gradle
┣ » gradlew
┣ » gradlew.bat
┣ 🐘settings.gradle
spring:
datasource:
url: jdbc:postgresql://${PGHOST}:${PGPORT}/${PGDATABASE}
username: ${PGUSER}
password: ${PGPASSWORD}
jpa:
open-in-view: false
hibernate:
ddl-auto: update ←
- Descobrindo o nome do arquivo .jar
Execute:
ou se preferir também é possível pelo terminal:
.\gradlew bootJar
Guarde o nome do arquivo .jar gerado dentro de build/libs:
📂santander-dev-week-2023-api
┣ 📂.gradle
┣ 📂.idea
┣ 📂build
┃ ┗ 📂libs
┃ ┗ ⚙santander-dev-week-2023-api-0.0.1-SNAPSHOT.jar ←
┣ 📂gradle
┣ 📂src
┣ 🚫.gitignore
┣ 🐘build.gradle
┣ » gradlew
┣ » gradlew.bat
┣ 🐘settings.gradle
Feito isto você pode excluir a pasta build ou executar o comando no terminal
.\gradlew clean
, pois não terá mais utilidade
- Criando o
Dockerfile
na raiz do projeto e preenchendo-o:
É um arquivo simples sem extensão.
📂santander-dev-week-2023-api
┣ 📂.gradle
┣ 📂.idea
┣ 📂gradle
┣ 📂src
┣ 🚫.gitignore
┣ 🐘build.gradle
┣ 🐋Dockerfile ←
┣ » gradlew
┣ » gradlew.bat
┣ 🐘settings.gradle
# Define a imagem base para a etapa de construção, que será uma versão do Debian
FROM debian:latest AS BUILD
# Atualiza os repositórios de pacotes e instala o JDK 17
RUN apt-get update && apt-get install -y openjdk-17-jdk
# Copia todo o conteúdo do diretório atual para o contexto de construção do Docker
COPY . .
# Concede permissão de execução ao script gradlew e executa os comandos clean e bootJar com ele
RUN chmod +x gradlew && ./gradlew clean bootJar
# Define a imagem base para a execução, que será uma versão mais leve do JDK 17
FROM openjdk:17-jdk-slim
# Copia o arquivo .jar da etapa de construção para o diretório atual do contêiner e o renomeia para app.jar
# Se atente ao nome do arquivo .jar gerado no passo anterior
COPY --from=build ./build/libs/santander-dev-week-2023-api-0.0.1-SNAPSHOT.jar app.jar
# Define o ponto de entrada do contêiner como a execução do arquivo .jar com a ativação do perfil "prd"
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prd", "app.jar"]
- Finalizado, faça um push das modificações para seu repositório Github.
Caso esteja seguindo por um clone do repositório de exemplo, execute o seguinte comando e suba para um novo repositório Github:
~/Desktop/santander-dev-week-2023-api
rm -rf .git ←
~/Desktop/santander-dev-week-2023-api
git init ←
- Criar uma conta no Render vinculada ao Github ou Google.
É importante ser vinculada à alguma conta para liberar o plano grátis
- Criar um novo Banco de Dados PostgreSQL
Preencher o campo name e prosseguir
- Criar um novo Web Service
- Passar a URL do repositório Github criado e prosseguir:
Preencher o campo name e as variáveis de ambiente de acordo com o arquivo
application-prd.yml
e as configurações deConnections
do PostgreSQL
- Copiar o endereço da documentação do Swagger
url do seu web-service
+/swagger-ui.html
No meu caso seria https://renderyaml.onrender.com
+ /swagger-ui.html
como pode-se averiguar:
- Mantendo o serviço ativo
Como fora abordado, o Render tem uma política de hibernar todo serviço grátis que não interagir dentro de um intervalo de 15 minutos.
Mas podemos utilizar o monitorador de serviços online UptimeRobot para enviar requisições a cada 5 minutos mantendo nosso serviço sempre interagindo.
Basta:
- Se registrar no UptimeRobot;
- Tornando-se um usuário você pode criar um serviço de monitoramento acessando este link;
- O tipo de monitoramento
Monitor Type
deve serHTTP
; - E em
URL to monitor:
basta colocar a URL do Swagger:url do seu web-service
+/swagger-ui.html
; - Caso não queira ser atualizado sobre o status do seu serviço basta desmarcar a caixa
Email
; - Pronto, basta criar seu monitor através do botão
Create Monitor
.
Top comments (0)