Visão Geral do Spring Boot e Configuração do Ambiente
O Spring Boot torna o desenvolvimento Java de nível corporativo tão fácil quanto montar blocos—com seus três recursos principais—configuração automática, dependências starter e container embarcado—ele elimina completamente a necessidade de configurações XML trabalhosas.
1. O Que Você Vai Aprender
- Três Recursos Principais Que Diferenciam o Spring Boot do Spring Tradicional
- Uma Visão Rápida dos Novos Recursos do Java 17 LTS (records, sealed classes, text blocks)
- Usar o Spring Initializr para gerar a estrutura do projeto
- Configuração do Ambiente de Desenvolvimento IDEA / VS Code e Recomendações de Plugins
- Contexto e Roteiro do Curso para o Projeto OrderFlow da Alice
2. Uma História Real de um Desenvolvedor Backend
(1) Ponto de Dor: O Inferno da Configuração XML
Alice é uma desenvolvedora backend que acabou de assumir um projeto Spring MVC tradicional—o sistema de gerenciamento de pedidos de e-commerce OrderFlow. O projeto contém mais de 20 arquivos de configuração XML, com as configurações de fonte de dados sozinhas abrangendo 5 arquivos. Toda vez que ela adiciona um novo recurso, precisa alternar entre três arquivos XML, e leva uma média de duas semanas para novos membros da equipe se atualizarem. A implantação também requer a instalação separada do Tomcat e a configuração da fonte de dados JNDI, e solucionar um único problema de ambiente pode levar meio dia.
(2) A Solução do Spring Boot
O Spring Boot usa a filosofia "convenção sobre configuração" para substituir a configuração XML trabalhosa por uma inicialização sem configuração:
@SpringBootApplication
public class OrderFlowApplication {
public static void main(String[] args) {
SpringApplication.run(OrderFlowApplication.class, args);
}
}
(3) Resultado
Depois que Alice refatorou o OrderFlow usando o Spring Boot: o número de arquivos de configuração XML caiu de 20 para 0, o tempo de integração de novos contratados foi reduzido de 2 semanas para 2 dias, a implantação requer apenas um único comando—java -jar—e o Tomcat embarcado está pronto para uso imediato.
3. Recursos Principais do Spring Boot
(1) Três Recursos Principais
Os conceitos centrais do Spring Boot podem ser resumidos com três palavras-chave: auto-configuração, dependências starter e container embarcado.
graph LR
A[Spring Boot] --> B[Auto-Configuration<br/>Auto Configuration]
A --> C[Starter Dependencies<br/>Starter Dependencies]
A --> D[Embedded Server<br/>Embedded Server]
B --> B1[Condition-based<br/>Bean Registration]
C --> C1[Opinionated<br/>Dependency Management]
D --> D1[Tomcat / Jetty<br/>/ Undertow]
| Recurso | Spring Tradicional | Spring Boot |
|---|---|---|
| Método de Configuração | XML extenso / Java Config | Auto-configuração + YAML mínimo |
| Gerenciamento de Dependências | Especificação manual de versões pode gerar conflitos | Dependências starter, com gerenciamento unificado de versões |
| Servidor de Aplicação | Tomcat instalado externamente | Tomcat embarcado, executa diretamente do JAR |
| Estrutura do Projeto | Requer configuração manual de scanning de componentes | @SpringBootApplication Ativação com um clique |
| Método de Inicialização | Implantar WAR no Container | java -jar ou mvn spring-boot:run |
(2) Novos Requisitos do Spring Boot 3.x
O Spring Boot 3.x é uma versão principal que requer no mínimo Java 17 e Jakarta EE 9+.
| Dimensão | Spring Boot 2.x | Spring Boot 3.x |
|---|---|---|
| Versão Mínima do Java | Java 8 | Java 17 |
| Namespace | javax.* |
jakarta.* |
| Spring Framework | 5.x | 6.x |
| GraalVM Native Image | Experimental | Suportado Oficialmente |
| Observabilidade | Básico do Micrometer | Integração Profunda do Micrometer e OTel |
javax → jakarta no Spring Boot 3.x é a mudança mais significativa; todos os import devem ser atualizados.
4. Uma Visão Rápida dos Novos Recursos do Java 17 LTS
(1) A Classe Record
Record é um tipo de dado imutável que gera automaticamente construtor, getters, equals, hashCode e toString.
(1) ▶ Exemplo: Usando Record para Definir um Order DTO
public record OrderRequest(
Long productId,
Integer quantity,
String customerEmail
) {}
Saída:
// Execução bem-sucedida
(2) Sealed Class
Uma sealed class restringe quais classes podem herdar dela ou implementá-la, aumentando assim a segurança de tipos.
(2) ▶ Exemplo: Definindo Status de Pagamento Usando uma Sealed Class
public sealed interface PaymentStatus
permits Pending, Completed, Failed {}
public record Pending(String transactionId) implements PaymentStatus {}
public record Completed(String transactionId, LocalDateTime paidAt) implements PaymentStatus {}
public record Failed(String transactionId, String reason) implements PaymentStatus {}
Saída:
// Execução bem-sucedida
(3) Text Block
Text Block: Use aspas triplas para escrever strings de múltiplas linhas e diga adeus aos caracteres de escape.
(3) ▶ Exemplo: Escrevendo uma Consulta SQL Usando um Text Block
String query = """
SELECT o.id, o.total_amount, c.email
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE o.status = 'PENDING'
AND o.created_at < :cutoffTime
ORDER BY o.created_at DESC
""";
Saída:
// Execução bem-sucedida
| Recurso | Sintaxe Java 11 | Sintaxe Java 17 |
|---|---|---|
| Dados Imutáveis | Lombok codificado manualmente ou Boilerplate | record Feito em uma linha |
| Controle de Hierarquia de Tipos | Herança irrestrita | sealed Subclasses restritas |
| Strings de múltiplas linhas | Concatenação + \n |
""" ... """ |
| Switch Expression | Comando | Expressão + Pattern Matching Preview |
5. Criando um Projeto Usando o Spring Initializr
(1) Introdução ao Spring Initializr
O Spring Initializr é o gerador oficial de projetos que permite criar esqueletos de projeto rapidamente via interface web ou integração com IDE.
(1) ▶ Exemplo: Usando o Spring Initializr com curl
curl https://start.spring.io/starter.zip \
-d type=maven-project \
-d language=java \
-d bootVersion=3.2.5 \
-d groupId=com.orderflow \
-d artifactId=orderflow-service \
-d name=orderflow-service \
-d packageName=com.orderflow \
-d javaVersion=17 \
-d dependencies=web,data-jpa,mysql,validation \
-o orderflow-service.zip
Saída:
{"status":"ok","data":{}}
(2) Estrutura do Projeto Gerado
orderflow-service/
├── src/
│ ├── main/
│ │ ├── java/com/orderflow/
│ │ │ └── OrderflowServiceApplication.java
│ │ └── resources/
│ │ ├── application.properties
│ │ ├── static/
│ │ └── templates/
│ └── test/
│ └── java/com/orderflow/
│ └── OrderflowServiceApplicationTests.java
├── pom.xml
└── mvnw / mvnw.cmd
(2) ▶ Exemplo: Dependências principais no pom.xml do OrderFlow
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.5</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
Saída:
// Execução bem-sucedida
6. Configurando o Ambiente de Desenvolvimento
(1) Seleção de IDE e Plugins
| IDE | Plugins Recomendados | Vantagens |
|---|---|---|
| IntelliJ IDEA Ultimate | Spring Boot Plugin / Spring Initializr | Melhor suporte Spring, execução com um clique |
| IntelliJ IDEA Community | Spring Boot Assistant (terceiros) | Gratuito, mas com funcionalidade limitada |
| VS Code | Spring Boot Extension Pack | Leve, ideal para desenvolvedores front-end migrando para backend |
(2) Lista de Ferramentas Essenciais
| Ferramenta | Finalidade | Verificação de Instalação |
|---|---|---|
| JDK 17+ | Compilar e Executar | java -version |
| Maven 3.9+ | Ferramenta de Build | mvn -version |
| Git | Controle de Versão | git --version |
| Postman / curl | Teste de API | Enviar uma requisição de teste |
(1) ▶ Exemplo: Verificando o Ambiente de Desenvolvimento
# Verificar versão do Java (deve ser 17+)
java -version
# openjdk version "17.0.9"
# Verificar Maven
mvn -version
# Apache Maven 3.9.6
# Verificar Git
git --version
# git version 2.43.0
Saída:
# Comando executado com sucesso
7. OrderFlow: Contexto do Projeto e Roteiro do Curso
(1) Cenários de Negócio do OrderFlow
O OrderFlow, desenvolvido pela Alice, é um sistema de gerenciamento de pedidos de e-commerce baseado em microsserviços. Suas funções principais incluem:
| Módulo | Função | Destaques Técnicos |
|---|---|---|
| Gerenciamento de Produtos | CRUD / Cache / Busca | JPA + Redis + Caffeine |
| Gerenciamento de Pedidos | Fazer Pedidos / Cancelar Pedidos / Cancelamento Automático por Timeout | Transações + Tarefas Agendadas + Operações Assíncronas |
| Autenticação de Usuários | Registro / Login / Permissões de Papel | Spring Security + JWT |
| Operações e Monitoramento | Health Checks / Métricas / Rastreamento | Actuator + Prometheus + Grafana |
(2) Roteiro do Curso
graph LR
P1["Fase 1<br/>Introdução<br/>L01-L06"] --> P2["Fase 2<br/>Recursos Principais<br/>L07-L12"]
P2 --> P3["Fase 3<br/>Recursos Avançados<br/>L13-L18"]
P3 --> P4["Fase 4<br/>Gerenciamento e Operações<br/>L19-L23"]
P4 --> P5["Fase 5<br/>Prática Abrangente<br/>L24-L26"]
8. Exemplo Abrangente: Criando um Projeto OrderFlow e Verificando o Ambiente
// OrderflowServiceApplication.java
package com.orderflow;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class OrderflowServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderflowServiceApplication.class, args);
}
}
// controller/HealthController.java
package com.orderflow.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class HealthController {
@GetMapping("/api/health")
public Map<String, Object> health() {
return Map.of(
"status", "UP",
"service", "OrderFlow",
"version", "1.0.0"
);
}
}
$ curl http://localhost:8080/api/health
{"status":"UP","service":"OrderFlow","version":"1.0.0"}
❓ Perguntas Frequentes
record pode substituir todos os POJOs?record é adequado para objetos de transferência de dados (DTOs) imutáveis. Se você precisa de uma entidade JPA (que requer mutabilidade e um construtor sem argumentos), ainda deve usar uma classe comum.📖 Resumo
- Três Recursos Principais do Spring Boot: Auto-Configuração, Dependências Starter e Containers Embarcados—Diga Adeus ao Pesadelo da Configuração XML
- Spring Boot 3.x requer Java 17 ou superior, e o nome do pacote foi alterado de
javaxparajakarta - Novos Recursos do Java 17: records (DTOs imutáveis), sealed classes (herança restrita) e text blocks (strings de múltiplas linhas)
- Spring Initializr gera rapidamente o scaffolding do projeto, tornando a integração com IDE mais conveniente
- O gerenciamento de pedidos de e-commerce OrderFlow é o cenário de negócio que permeia todo o tutorial
📝 Exercícios
-
Exercício Básico (Dificuldade ⭐): Use o Spring Initializr para criar um projeto Spring Boot 3.x que inclua a dependência
spring-boot-starter-web. Após executar o projeto, acesse/api/healthpara retornar{"status":"UP"}. -
Problema Avançado (Dificuldade ⭐⭐): Defina um
Productrecord no projeto que contenha os camposid,nameeprice, e crie umProductControllerque retorne uma lista de produtos fixa no código. -
Desafio (Dificuldade: ⭐⭐⭐): Use a
sealed interfacepara definirOrderStatus(que inclui quatro implementações:PENDING,CONFIRMED,SHIPPEDeCANCELLED), e retorne diferentes códigos de status HTTP no controller com base nos diferentes status.



