🧩 Exercícios: Migrações com Flyway e Gestão de Transações
Spec Backend Com Java E Springboot • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 08.1 — Scripts de Versionamento Flyway (V1__criar_tabelas.sql)
Contexto: Scripts de Versionamento Flyway (V1__criar_tabelas.sql) no contexto de Migrações com Flyway e Gestão de Transações.
Requisitos de Execução:
- Organizar migrações na pasta
src/main/resources/db/migrationcom padrão de nomenclatura estrito.
Resultado Esperado
Flyway executou V1 e V2 registrando checksums na tabela flyway_schema_history.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_1_SeuNome - Envie na tarefa:
Atividade Cap 08 - Migrações com Flyway e Gestão de Transações
🔑 Gabarito de Código & Solução Comentada
-- V1__criar_tabela_usuarios.sql
CREATE TABLE usuarios (
id BIGSERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
criado_em TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
🔍 Nível 2: Prática
Problema 08.2 — Demarcação Transacional com @Transactional e Propagation
Contexto: Demarcação Transacional com @Transactional e Propagation no contexto de Migrações com Flyway e Gestão de Transações.
Requisitos de Execução:
- Configurar
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class).
Resultado Esperado
Transação gerenciada pelo Spring: Commit ao finalizar método com sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_2_SeuNome - Envie na tarefa:
Atividade Cap 08 - Migrações com Flyway e Gestão de Transações
🔑 Gabarito de Código & Solução Comentada
// TransacaoService.java
package com.empresa.api.service;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Service
public class TransacaoService {
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void processar() {
// Operações no banco
}
}
⚡ Nível 3: Integração
Problema 08.3 — Propagação REQUIRES_NEW para Auditoria Isolada
Contexto: Propagação REQUIRES_NEW para Auditoria Isolada no contexto de Migrações com Flyway e Gestão de Transações.
Requisitos de Execução:
- Configurar método de auditoria com
Propagation.REQUIRES_NEWgarantindo que o log seja gravado mesmo se a transação principal sofrer rollback.
Resultado Esperado
Log de auditoria persistido em transação independente.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_3_SeuNome - Envie na tarefa:
Atividade Cap 08 - Migrações com Flyway e Gestão de Transações
🔑 Gabarito de Código & Solução Comentada
// AuditLogService.java
package com.empresa.api.service;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@Service
public class AuditLogService {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void registrarLog(String evento) {
System.out.println("LOG AUDITADO: " + evento);
}
}
🏆 Nível 4: Desafio Corporativo
Problema 08.4 — Níveis de Isolamento Transacional (Isolation.READ_COMMITTED)
Contexto: Níveis de Isolamento Transacional (Isolation.READ_COMMITTED) no contexto de Migrações com Flyway e Gestão de Transações.
Requisitos de Execução:
- Configurar nível de isolamento para evitar leituras sujas (dirty reads) e gerenciar locks de banco.
Resultado Esperado
Isolamento transacional configurado para conformidade com regras bancárias.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_4_SeuNome - Envie na tarefa:
Atividade Cap 08 - Migrações com Flyway e Gestão de Transações
🔑 Gabarito de Código & Solução Comentada
// IsolationConfig.java
package com.empresa.api.service;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
@Service
public class ContaService {
@Transactional(isolation = Isolation.READ_COMMITTED)
public void debitar(Long id, Double valor) {}
}