404 Not Found

404 Not Found


nginx

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


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:

JAVA
@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.

100%
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
📌 Ponto-Chave: A migração do nome do pacote 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

JAVA
public record OrderRequest(
    Long productId,
    Integer quantity,
    String customerEmail
) {}

Saída:

TEXT
// 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

JAVA
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:

TEXT
// 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

JAVA
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:

TEXT
// 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

BASH
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:

TEXT
{"status":"ok","data":{}}

(2) Estrutura do Projeto Gerado

TEXT
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

XML
<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:

TEXT
// 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

BASH
# 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:

TEXT
# 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

100%
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

JAVA
// 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"
        );
    }
}
💻 Saída:

TEXT
$ curl http://localhost:8080/api/health
{"status":"UP","service":"OrderFlow","version":"1.0.0"}

❓ Perguntas Frequentes

P Qual é a relação entre Spring Boot e Spring Framework?
R Spring Framework é o framework base, enquanto Spring Boot é uma ferramenta de scaffolding de desenvolvimento rápido construída sobre o Spring Framework. Ele fornece auto-configuração, dependências starter e container embarcado, permitindo que você comece rapidamente sem configuração manual.
P Java 17 é obrigatório? Não posso usar Java 11?
R Spring Boot 3.x requer Java 17 ou superior; este é o requisito mínimo para Jakarta EE 9 ou superior. Se você precisar usar Java 8 ou 11, terá que usar Spring Boot 2.x, mas ele atingiu seu fim de vida (EOL) e não receberá mais atualizações de segurança.
P Qual devo escolher, Maven ou Gradle?
R Qualquer um serve. Maven tem um ecossistema mais maduro e documentação mais extensa, por isso este tutorial usa Maven. Gradle compila mais rápido e é mais adequado para projetos grandes e multi-módulo.
P Posso usar um projeto gerado pelo Spring Initializr imediatamente?
R Você pode executá-lo imediatamente; ele já inclui a classe principal de inicialização e classes de teste. No entanto, você precisará adicionar dependências e código com base nos seus requisitos de negócio, como entidades JPA, controllers, services, etc.
P Um record pode substituir todos os POJOs?
R Um 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.
P A edição Community do IDEA é suficiente?
R A edição Community não tem o plugin oficial do Spring Boot, mas você ainda pode usá-la para fins básicos com plugins de terceiros. Se seu orçamento permitir, a edição Ultimate oferece suporte Spring mais abrangente e é recomendada.

📖 Resumo


📝 Exercícios

  1. 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/health para retornar {"status":"UP"}.

  2. Problema Avançado (Dificuldade ⭐⭐): Defina um Product record no projeto que contenha os campos id, name e price, e crie um ProductController que retorne uma lista de produtos fixa no código.

  3. Desafio (Dificuldade: ⭐⭐⭐): Use a sealed interface para definir OrderStatus (que inclui quatro implementações: PENDING, CONFIRMED, SHIPPED e CANCELLED), e retorne diferentes códigos de status HTTP no controller com base nos diferentes status.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%