dosza / mergulho-java

Projeto criado no evento Mergulho Java da Algaworks

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Mergulho Java

Códigos ensinados no evento mergulho java da Algaworks

Índice

  1. API RH v0.1.0
  2. Diferenças deste projeto
    1. Diferenças de implementação
    2. Getters and Setters
    3. Equals and HashCode
  3. Docker
    1. Estrutura de um projeto docker
    2. Pré-requisitos
    3. Arquivo .env
      1. Configurando o arquivo .env na raiz do repositório
    4. compose.yaml
    5. Executando o projeto com Docker
      1. Executando apenas o container MySQL
    6. Reconstruindo a imagem docker da aplicação
    7. Paralizando o projeto
    8. Dica
  4. Notas de aula
  5. Referências

1. API RH v0.1.0

Link da especificação da API

2. Diferenças deste projeto

Recurso Projeto original v0.1.0
Banco de dados H2* MySQL
Docker compose para MySQL ❌️ ✅️
Docker compose para MYSQL e backend ❌️ ✅️
Makefile para docker-compose ❌️ ✅️
Método HTTP DELETE ❌️ ✅️

* H2 é um banco de dados em memória RAM.

2.1 Diferenças de implementação

Classe Funcionario

2.1.1 Getters and Setters

Substitui os métodos getters, setters pelas respectivas anotações @Getter e @Setter

2.1.2 Equals and HashCode

Substitui os métodos equals, hashCode pela anotação @EqualsAndHashCode.
Estes métodos são fundamentais para comparar objetos da mesma classe

3 Docker

Novidades: Agora é possível levantar as imagens docker com o comando make

3.1 Estrutura de um projeto docker

3.2 Pré-requisitos

  1. Instalar docker
  2. Instalar docker-compose
  3. Instalar make
  4. Configurar o arquivo .env
  5. Executar o projeto

3.3 Arquivo .env

3.3.1 Configurando o arquivo .env na raiz do repositório

Note: .env é um arquivo de variáveis de ambiente (consta no .gitignore) Substitua password pela respectiva senha do banco de dados.

MYSQLDB_USER=root
MYSQLDB_ROOT_PASSWORD=password
MYSQLDB_DATABASE=rhapi_db
MYSQLDB_LOCAL_PORT=3307
MYSQLDB_DOCKER_PORT=3306
SPRING_LOCAL_PORT=8080
SPRING_DOCKER_PORT=8080

3.4 compose.yaml

O arquivo compose.yaml configura dois serviços.

  1. mysqldb (configura o banco de dados)
  2. app (executa a aplicação spring boot)
    environment:
      SPRING_APPLICATION_JSON: '{
        "spring.datasource.url"  : "jdbc:mysql://mysqldb:$MYSQLDB_DOCKER_PORT/$MYSQLDB_DATABASE?useSSL=false&createDatabaseIfNotExist=true&allowPublicKeyRetrieval=true",
        "spring.datasource.username" : "$MYSQLDB_USER",
        "spring.datasource.password" : "$MYSQLDB_ROOT_PASSWORD"
      }'
      

Este projeto utiliza a imagem mysql:latest
Foram aplicadas configurações especificas em application.properties

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

3.5 Executando o projeto com Docker

Note: Estes comandos devem ser executados na pasta raíz do repositório.
Isto levantará um container com mysql e outro executando a aplicação spring

make 

3.5.1 Executando apenas o container MySQL

Note: será executado o container configurado em docker-compose.yml

Dica: crie um link-simbólico de .env na pasta rh-api

ln -s $PWD/.env ./rh-api/.env
make database

3.6 Reconstruindo a imagem docker da aplicação

Gera o container com a imagens atualizadas.

make build

3.7 Paralizando o projeto

make down

3.8 Dica

Para paralizar o container e deletar arquivos use:

make clean

4 Notas de aula

5 Referências

  1. Docker Compose: Spring Boot and MySQL example
  2. Connection Spring Boot-MySql : Public Key Retrieval is not allowed

About

Projeto criado no evento Mergulho Java da Algaworks


Languages

Language:Java 97.2%Language:Makefile 1.8%Language:Dockerfile 1.0%