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.xmloubuild.gradlecom 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:
- Interface Web: https://start.spring.io/
- IDE integrada: IntelliJ IDEA, VS Code com extensões Spring
- Spring CLI: Linha de comando
- 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:
| Tipo | Descrição | Utilização |
|---|---|---|
| Maven | Ferramenta de build XML | Recomendado para iniciantes, muito documentado |
| Gradle | Ferramenta de build Groovy/Kotlin DSL | Mais 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:
| Linguagem | Descrição | Nível |
|---|---|---|
| Java | Linguagem principal do Spring | Recomendado |
| Kotlin | Linguagem moderna da JetBrains | Avançado |
| Groovy | Linguagem dinâmica | Menos 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:
| Tipo | Sufixo | Significado | Utilização |
|---|---|---|---|
| Release | Nenhum | Versão estável | Produção |
| Snapshot | -SNAPSHOT | Versão em desenvolvimento | Apenas desenvolvimento |
| Milestone | -M1, -M2 | Versão beta | Testes |
| Release Candidate | -RC1 | Candidato a release | Testes 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:
| Tipo | Descrição | Utilização |
|---|---|---|
| JAR | Java Archive (standalone) | Aplicações Spring Boot com servidor embutido |
| WAR | Web Archive | Deploy 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ão | Suporte | Recomendação |
|---|---|---|
| Java 17 | LTS | Recomendado |
| Java 21 | LTS | Muito recente |
| Java 11 | Antigo LTS | Nã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
| Starter | Descrição | Utilização |
|---|---|---|
| Spring Web | REST APIs, Spring MVC | Aplicações web REST |
| Spring Reactive Web | WebFlux (reativo) | Aplicações altamente escaláveis |
2. SQL (Bancos de dados relacionais)
| Starter | Descrição |
|---|---|
| Spring Data JPA | ORM com Hibernate |
| JDBC API | Acesso SQL de baixo nível |
| MyBatis Framework | Mapeamento SQL/Java |
3. NoSQL
| Starter | Descrição |
|---|---|
| Spring Data MongoDB | Banco de dados de documentos |
| Spring Data Redis | Cache em memória |
| Spring Data Elasticsearch | Busca full-text |
4. Segurança
| Starter | Descrição |
|---|---|
| Spring Security | Autenticação e autorização |
| OAuth2 Client | Login social (Google, Facebook) |
| OAuth2 Resource Server | API protegida |
5. SQL Drivers
| Driver | Banco de dados |
|---|---|
| PostgreSQL Driver | PostgreSQL |
| MySQL Driver | MySQL/MariaDB |
| H2 Database | Banco em memória (testes) |
| Oracle Driver | Oracle Database |
6. I/O
| Starter | Descrição |
|---|---|
| Validation | Validação de dados (@Valid) |
| Spring Web Services | SOAP Web Services |
| Spring for Apache Kafka | Mensageria Kafka |
7. Developer Tools
| Tool | Descrição | Utilização |
|---|---|---|
| Spring Boot DevTools | Reload automático | Desenvolvimento |
| Lombok | Redução de código boilerplate | Produtividade |
| Spring Configuration Processor | Autocompletar configs | Desenvolvimento |
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:
-
EXPLORE (Ctrl + Space)
- Pré-visualizar a estrutura do projeto
- Ver o conteúdo do
pom.xml - Conferir os arquivos gerados
-
SHARE
- Gerar um link compartilhável
- Compartilhar a configuração com o time
-
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:
- Descompacte o ZIP
- VS Code → File → Open Folder
- Selecione a pasta
greeting - Aguarde a importação automática do Maven
- Extensões necessárias:
- Extension Pack for Java
- Spring Boot Extension Pack
Opção 2: IntelliJ IDEA
Passos:
- Descompacte o ZIP
- IntelliJ → File → Open
- Selecione a pasta
greeting - IntelliJ detecta automaticamente o projeto Maven
- Aguarde a indexação
Opção 3: Eclipse/Spring Tool Suite (STS)
Passos:
- Descompacte o ZIP
- Eclipse → File → Import
- Maven → Existing Maven Projects
- Selecione a pasta
greeting - Finish
Alternativas à Interface Web
1. Spring Initializr no VS Code
Instalação:
- Extensão: Spring Initializr Java Support
Utilização:
- Ctrl + Shift + P
- Digite: "Spring Initializr: Create a Maven Project"
- 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:
- Acesse https://start.spring.io/
- Configure:
- Tipo: Maven
- Java: 17
- Group:
com.example - Artifact:
hello-rest
- Adicione: Spring Web
- Gere e baixe
- Importe no VS Code
Exercício 2: Criar um Projeto com Banco de Dados
Objetivo: Criar um projeto com JPA
Instruções:
- Acesse https://start.spring.io/
- Configure:
- Tipo: Maven
- Java: 17
- Group:
com.example - Artifact:
user-manager
- Adicione:
- Spring Web
- Spring Data JPA
- PostgreSQL Driver
- Validation
- Gere e explore o
pom.xml
Exercício 3: Analisar um pom.xml
Objetivo: Compreender as dependências geradas
Instruções:
- Gere um projeto com Spring Web
- Abra o
pom.xml - Identifique:
- O parent Spring Boot
- O starter web
- O plugin Maven Spring Boot
- Liste todas as dependências transitivas
Perguntas de Revisão
-
O que é o Spring Initializr?
-
Qual a diferença entre Maven e Gradle?
-
O que significa "starter" no Spring Boot?
-
Qual a convenção para o Group ID?
-
Por que escolher JAR ao invés de WAR para Spring Boot?
-
Qual a versão mínima do Java para Spring Boot 3.x?
-
Para que serve o Spring Boot DevTools?
-
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