Série: Recolocação e teste prático Java

Episódio 02: Preparando o terreno: Spring Boot, dependências e estrutura inicial

Episódio 02: Spring Boot e estrutura

Depois do plano, o conforto do projeto

Com o mapa mental fechado no episódio anterior, a etapa seguinte no fluxo de recolocação é criar uma base que não atrapalhe o resto da solução. O avaliador não deve caçar variáveis escondidas nem adivinhar como subir a aplicação.

Esse conforto começa na visão geral operacional: quem gera o projeto, o que sobe e quem valida — ainda sem falar de regra de negócio:

Quem consome a base recém-criada
Dev / candidato IDE + build
(Maven / Gradle)
Aplicação em arranque
(Spring Boot)
Avaliador
(sobe e valida)

O loop é compilar, subir, abrir Swagger e H2 — prova de que a fundação existe.

O problema por trás da etapa

Depois que o desafio foi lido como arquitetura e não apenas como lista de endpoints, a próxima etapa é criar a base do projeto. Essa parte parece burocrática, mas define o conforto do desenvolvimento inteiro. Um projeto bem iniciado tem dependências coerentes, configurações previsíveis e estrutura de pacotes que já comunica a intenção.

A stack escolhida para a série é Spring Boot com Java 17 ou superior. Para atender ao enunciado, precisamos de Spring Web, Spring Data JPA, Hibernate, H2 em memória, Flyway para migrations, Jakarta Bean Validation e springdoc-openapi para Swagger. Essas peças cobrem o pedido sem inflar o escopo.

A tentação é colocar tudo em pacotes genéricos service, controller e repository. Isso roda, mas não conta a história da arquitetura. Como o PDF exige camadas, a estrutura inicial precisa refletir isso: por exemplo web, application, domain e infra.

As dependências do Initializr mapeiam direto para blocos do ecossistema Spring — cada caixa é uma escolha que se defende na banca:

Starters e responsabilidades técnicas
Spring Web
REST, MVC
Spring Data JPA
Hibernate
Flyway
migrations
Validation + springdoc
Bean Validation, OpenAPI

Cada caixa corresponde a uma decisão no pom ou build.gradle.

A decisão técnica

Na camada web ficam controllers, DTOs HTTP, configuração OpenAPI e handlers de erro. Na application, services ou casos de uso. No domain, entidades, enums e contratos do negócio. Na infra, persistência, repositórios JPA e migrations. Pastas pequenas no início já criam mapa mental consistente.

O application.yml pode definir porta, datasource H2, console H2, JPA, Flyway e caminho do Swagger. Para teste prático, configuração local direta e transparente reduz atrito. H2 em memória, JDBC explícito, Flyway em db/migration, JPA com validação de schema contra migrations — sinal de maturidade mesmo em projeto pequeno.

O Swagger entra cedo: quando o controller aparecer, já haverá lugar para verificar contratos sem montar requests à mão.

No mesmo processo JVM, três blocos de execução mostram onde vivem runtime, dados e documentação servida:

O que corre na máquina
JVM: Spring Boot
(API + config)
H2 em memória
(ficheiro JDBC)
springdoc / Swagger UI
(documentação servida)

Flyway e OpenAPI partilham o mesmo deployável — simples para o avaliador.

Implementando com critério

Escolha nomes que falem a língua do problema: VeiculoController, VeiculoService, CriarVeiculoRequest, VeiculoResponse. Em teste prático, legibilidade é gentileza técnica.

Nesta etapa ainda não resolvemos todas as regras. O objetivo é deixar o projeto compilando, subindo, com Swagger e H2 acessíveis e Flyway aplicando migration inicial. O que vier depois terá onde morar.

Na organização do código, a árvore de pastas e ficheiros é o primeiro “exame visual” do avaliador:

Estrutura inicial visível
src/main/java/…/
web · application
src/main/java/…/
domain · infra
src/main/resources/
application.yml
src/main/resources/
db/migration

Config centralizada, SQL versionado e pacotes que já contam a história das camadas.

Fechamento da etapa

Uma estrutura inicial sugere: web para entrada HTTP, application para orquestração, domain para modelo, infra para banco; migrations em resources/db/migration; manual de arranque em README.md já com comando, URLs e pré-requisitos. Isso evita crescimento desordenado e facilita explicar onde está cada responsabilidade.

Com o terreno preparado, o próximo episódio entra no coração: domínio de veículos, enum de marca e validações.

Como defender essa etapa

Justifique Spring Boot pela integração natural com web, validação, JPA, H2, Flyway e OpenAPI — não só por “ser popular”. Flyway desde o início mostra schema versionado; Swagger cedo alinha documentação à implementação; setup reproduzível é competência de entrega.

Reflexão final: Fundação boa não atrasa: ela evita retrabalho quando a banca abrir o projeto pela primeira vez.


Nota: Cenário anonimizado; série de insights técnicos reutilizáveis.

Christian Mulato
Engenheiro Construtor

© 2026 Christian Mulato. Todos os direitos reservados.