Pular para o conteúdo principal

Capítulo 1: Spring Initializr

Introdução​

Spring Initializr é um gerador de projetos web que permite criar rapidamente um projeto Spring Boot com as dependências e configurações básicas necessárias. É o ponto de partida recomendado para qualquer novo projeto Spring Boot.

Objetivos do Capítulo​

Ao final deste capítulo, você será capaz de:

  • Utilizar o Spring Initializr para criar projetos Spring Boot
  • Compreender as diferentes opções de configuração
  • Escolher as dependências corretas para seu projeto
  • Gerar e importar um projeto em sua IDE

O que é o Spring Initializr?​

Definição​

Spring Initializr é uma ferramenta de bootstrap que gera a estrutura básica de um projeto Spring Boot. Ele:

  • Cria a estrutura de diretórios Maven ou Gradle
  • Gera o arquivo pom.xml ou build.gradle com as dependências
  • Adiciona a classe principal com @SpringBootApplication
  • Configura os arquivos de recursos básicos

Acesso ao Spring Initializr​

Existem várias formas de acessar o Spring Initializr:

  1. Interface Web: https://start.spring.io/
  2. IDE integrada: IntelliJ IDEA, VS Code com extensões Spring
  3. Spring CLI: Linha de comando
  4. API REST: Para automação

Interface Web do Spring Initializr​

URL de Acesso​

https://start.spring.io/

Seções Principais​

A interface é dividida em várias seções:


Configuração do Projeto​

1. Project Type (Tipo de Projeto)​

Opções disponíveis:

TipoDescriçãoUtilização
MavenFerramenta de build XMLRecomendado para iniciantes, muito documentado
GradleFerramenta de build Groovy/Kotlin DSLMais moderno, mais rápido, sintaxe concisa

Recomendação: Maven para este curso (mais padrão na indústria Java)

2. Language (Linguagem)​

Opções disponíveis:

LinguagemDescriçãoNível
JavaLinguagem principal do SpringRecomendado
KotlinLinguagem moderna da JetBrainsAvançado
GroovyLinguagem dinâmicaMenos comum

Recomendação: Java (linguagem deste curso)

3. Spring Boot Version​

Formato da versão: X.Y.Z

  • X: Versão principal (mudanças maiores)
  • Y: Versão secundária (novas funcionalidades)
  • Z: Versão patch (correções de bugs)

Exemplo:

3.2.0

Tipos de versões:

TipoSufixoSignificadoUtilização
ReleaseNenhumVersão estávelProdução
Snapshot-SNAPSHOTVersão em desenvolvimentoApenas desenvolvimento
Milestone-M1, -M2Versão betaTestes
Release Candidate-RC1Candidato a releaseTestes finais

Recomendação: Sempre escolha a última versão estável (sem sufixo)


Metadados do Projeto​

Estrutura dos Metadados​

1. Group​

Definição: Identificador da organização ou equipe (convenção Maven)

Formato: Nome de domínio invertido

Exemplos:

com.example          # Exemplo genérico
com.inskillflow # Organização inskillflow
org.springframework # Spring Framework

Convenção: Utilize seu domínio invertido ou com.example para exercícios

2. Artifact​

Definição: Identificador único do projeto

Formato: Letras minúsculas, hífens para espaços

Exemplos:

greeting-app
user-management-service
e-commerce-backend

Convenção: Nome descritivo em kebab-case

3. Name​

Definição: Nome de exibição do projeto

Formato: Nome legível por humanos

Exemplos:

Greeting Application
User Management Service
E-Commerce Backend

4. Description​

Definição: Descrição curta do projeto

Exemplo:

Aplicação Spring Boot para gerenciar saudações

5. Package Name​

Definição: Pacote Java raiz do projeto

Formato: Gerado automaticamente: {group}.\{artifact\}

Exemplo:

com.example.greeting

Estrutura resultante:

src/main/java/com/example/greeting/
├── GreetingApplication.java
├── controller/
├── service/
└── model/

6. Packaging​

Opções disponíveis:

TipoDescriçãoUtilização
JARJava Archive (standalone)Aplicações Spring Boot com servidor embutido
WARWeb ArchiveDeploy em servidor externo (Tomcat, etc.)

Recomendação: JAR (Spring Boot já inclui seu próprio servidor)

Diferença:

7. Java Version​

Versões suportadas pelo Spring Boot 3.x:

VersãoSuporteRecomendação
Java 17LTSRecomendado
Java 21LTSMuito recente
Java 11Antigo LTSNão suportado pelo Spring Boot 3.x

Nota importante: Spring Boot 3.x requer no mínimo Java 17


Gerenciamento de Dependências​

O que é uma Dependência?​

Uma dependência (ou dependency) é uma biblioteca externa que seu projeto utiliza.

Starters Spring Boot​

Spring Boot utiliza o conceito de "starters" - dependências agrupadas.

Formato de um starter:

spring-boot-starter-{tecnologia}

Categorias de Dependências​

1. Web​

StarterDescriçãoUtilização
Spring WebREST APIs, Spring MVCAplicações web REST
Spring Reactive WebWebFlux (reativo)Aplicações altamente escaláveis

2. SQL (Bancos de dados relacionais)​

StarterDescrição
Spring Data JPAORM com Hibernate
JDBC APIAcesso SQL de baixo nível
MyBatis FrameworkMapeamento SQL/Java

3. NoSQL​

StarterDescrição
Spring Data MongoDBBanco de dados de documentos
Spring Data RedisCache em memória
Spring Data ElasticsearchBusca full-text

4. Segurança​

StarterDescrição
Spring SecurityAutenticação e autorização
OAuth2 ClientLogin social (Google, Facebook)
OAuth2 Resource ServerAPI protegida

5. SQL Drivers​

DriverBanco de dados
PostgreSQL DriverPostgreSQL
MySQL DriverMySQL/MariaDB
H2 DatabaseBanco em memória (testes)
Oracle DriverOracle Database

6. I/O​

StarterDescrição
ValidationValidação de dados (@Valid)
Spring Web ServicesSOAP Web Services
Spring for Apache KafkaMensageria Kafka

7. Developer Tools​

ToolDescriçãoUtilização
Spring Boot DevToolsReload automáticoDesenvolvimento
LombokRedução de código boilerplateProdutividade
Spring Configuration ProcessorAutocompletar configsDesenvolvimento

Dependências para um Projeto REST Simples​

Para uma aplicação REST básica, escolha:

✅ Spring Web
✅ Spring Boot DevTools

Dependências para uma Aplicação Completa​

Para uma aplicação com banco de dados:

✅ Spring Web
✅ Spring Data JPA
✅ PostgreSQL Driver (ou outro)
✅ Validation
✅ Spring Boot DevTools
✅ Lombok (opcional)

Geração e Download​

Opções de Geração​

Botões disponíveis:

  1. EXPLORE (Ctrl + Space)

    • Pré-visualizar a estrutura do projeto
    • Ver o conteúdo do pom.xml
    • Conferir os arquivos gerados
  2. SHARE

    • Gerar um link compartilhável
    • Compartilhar a configuração com o time
  3. GENERATE (Ctrl + Enter)

    • Baixar o projeto em ZIP
    • Pronto para descompactar e importar

Estrutura do ZIP Gerado​

greeting-app.zip
└── greeting/
├── .mvn/ # Maven wrapper
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/greeting/
│ │ │ └── GreetingApplication.java
│ │ └── resources/
│ │ ├── static/ # Arquivos estáticos (CSS, JS, imagens)
│ │ ├── templates/ # Templates (Thymeleaf)
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/example/greeting/
│ └── GreetingApplicationTests.java
├── .gitignore
├── mvnw # Maven wrapper (Unix)
├── mvnw.cmd # Maven wrapper (Windows)
├── pom.xml # Configuração Maven
└── HELP.md

Importação em uma IDE​

Opção 1: Visual Studio Code​

Passos:

  1. Descompacte o ZIP
  2. VS Code → File → Open Folder
  3. Selecione a pasta greeting
  4. Aguarde a importação automática do Maven
  5. Extensões necessárias:
    • Extension Pack for Java
    • Spring Boot Extension Pack

Opção 2: IntelliJ IDEA​

Passos:

  1. Descompacte o ZIP
  2. IntelliJ → File → Open
  3. Selecione a pasta greeting
  4. IntelliJ detecta automaticamente o projeto Maven
  5. Aguarde a indexação

Opção 3: Eclipse/Spring Tool Suite (STS)​

Passos:

  1. Descompacte o ZIP
  2. Eclipse → File → Import
  3. Maven → Existing Maven Projects
  4. Selecione a pasta greeting
  5. Finish

Alternativas à Interface Web​

1. Spring Initializr no VS Code​

Instalação:

  • Extensão: Spring Initializr Java Support

Utilização:

  1. Ctrl + Shift + P
  2. Digite: "Spring Initializr: Create a Maven Project"
  3. Siga os prompts

2. Spring CLI​

Instalação:

# macOS
brew install spring-boot

# Linux/Windows
# Baixar em: https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-installing-the-cli

Utilização:

spring init \
--dependencies=web,data-jpa,postgresql \
--name=greeting \
--group-id=com.example \
--artifact-id=greeting \
greeting-app

3. API REST do Spring Initializr​

URL base:

https://start.spring.io

Exemplo com curl:

curl https://start.spring.io/starter.zip \
-d dependencies=web,data-jpa \
-d name=greeting \
-d groupId=com.example \
-d artifactId=greeting \
-o greeting.zip

Exercícios Práticos​

Exercício 1: Criar um Projeto Simples​

Objetivo: Criar um projeto REST simples

Instruções:

  1. Acesse https://start.spring.io/
  2. Configure:
    • Tipo: Maven
    • Java: 17
    • Group: com.example
    • Artifact: hello-rest
  3. Adicione: Spring Web
  4. Gere e baixe
  5. Importe no VS Code

Exercício 2: Criar um Projeto com Banco de Dados​

Objetivo: Criar um projeto com JPA

Instruções:

  1. Acesse https://start.spring.io/
  2. Configure:
    • Tipo: Maven
    • Java: 17
    • Group: com.example
    • Artifact: user-manager
  3. Adicione:
    • Spring Web
    • Spring Data JPA
    • PostgreSQL Driver
    • Validation
  4. Gere e explore o pom.xml

Exercício 3: Analisar um pom.xml​

Objetivo: Compreender as dependências geradas

Instruções:

  1. Gere um projeto com Spring Web
  2. Abra o pom.xml
  3. Identifique:
    • O parent Spring Boot
    • O starter web
    • O plugin Maven Spring Boot
  4. Liste todas as dependências transitivas

Perguntas de Revisão​

  1. O que é o Spring Initializr?

  2. Qual a diferença entre Maven e Gradle?

  3. O que significa "starter" no Spring Boot?

  4. Qual a convenção para o Group ID?

  5. Por que escolher JAR ao invés de WAR para Spring Boot?

  6. Qual a versão mínima do Java para Spring Boot 3.x?

  7. Para que serve o Spring Boot DevTools?

  8. Qual dependência é necessária para criar REST APIs?


Resumo do Capítulo​

Pontos-Chave​

  • Spring Initializr gera rapidamente projetos Spring Boot
  • Acessível via web, IDE, CLI ou API
  • Configuração em 3 seções: Projeto, Metadados, Dependências
  • Os "starters" agrupam dependências coerentes
  • JAR é o empacotamento recomendado para Spring Boot
  • Java 17+ é obrigatório para Spring Boot 3.x

Boas Práticas​

  • Utilize versões estáveis do Spring Boot
  • Escolha apenas as dependências necessárias
  • Siga as convenções de nomenclatura Maven
  • Use DevTools no desenvolvimento
  • Versione o código desde a criação

Próximos Passos​

No próximo capítulo, vamos explorar em detalhes:

Capítulo 2: Estrutura de um Projeto Spring Boot

  • Organização dos pacotes
  • Papel de cada arquivo
  • Convenções de nomenclatura
  • Arquitetura em camadas

Voltar ao Módulo 2