Migrações de banco de dados em Java: visão geral das ferramentas populares

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Migrações de banco de dados em Java: por que são necessárias e como funcionam



O desenvolvimento de qualquer aplicação séria em Java está intrinsecamente ligado à evolução do esquema do banco de dados. Adicionar novos campos, alterar tipos de dados, criar índices — tudo isso é inevitável durante o desenvolvimento do projeto. A execução manual de scripts SQL em diferentes ambientes (ambiente de desenvolvimento local, servidor de teste, produção) rapidamente leva ao caos: os scripts se perdem, são executados fora de ordem e o banco de dados de uma equipe difere do de outra. A solução para este problema são as migrações de banco de dados (database migrations).



As migrações permitem versionar as alterações no esquema, aplicá-las automaticamente na sequência correta e reverter quando necessário. No mundo Java, existem dois líderes indiscutíveis nesta área: Flyway e Liquibase. Vamos analisá-los em detalhes.



Flyway: simplicidade e confiabilidade



Flyway é uma ferramenta de migração leve, simples e poderosa. Sua filosofia é: "Migrações são apenas SQL ou classes Java". Os princípios básicos de funcionamento são:



  • Versionamento: cada arquivo de migração possui um número de versão único (por exemplo, V1__create_users.sql, V2__add_email.sql).
  • Ordem de execução: o Flyway rastreia as migrações aplicadas em uma tabela especial (flyway_schema_history) e aplica apenas as novas.
  • Dois tipos de migrações: scripts SQL e migrações Java (para lógica complexa).
  • Reversão: suporta migrações "undo" (na versão paga) ou a escrita manual de scripts de reversão.


Exemplo de uso do Flyway



Suponha que você precise criar uma tabela de usuários. Você cria o arquivo db/migration/V1__create_users.sql:



CREATE TABLE users (    id BIGINT AUTO_INCREMENT PRIMARY KEY,    username VARCHAR(50) NOT NULL,    email VARCHAR(100) NOT NULL,    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);


Em seguida, adiciona a segunda migração V2__add_age.sql:



ALTER TABLE users ADD COLUMN age INT;


A conexão do Flyway a uma aplicação Spring Boot é feita através do application.properties:



spring.flyway.enabled=truespring.flyway.locations=classpath:db/migrationspring.datasource.url=jdbc:postgresql://localhost:5432/mydbspring.datasource.username=userspring.datasource.password=pass


Ao iniciar a aplicação, o Flyway verificará a tabela de histórico e aplicará todas as novas migrações. Se uma migração já tiver sido executada, ela será ignorada.



Liquibase: flexibilidade e controle



Liquibase é uma ferramenta mais flexível e poderosa que suporta vários formatos de descrição de alterações: XML, YAML, JSON e SQL. Sua característica principal são os changesets (conjuntos de alterações).



  • Identificador único: cada changeset possui um id e um author.
  • Geração automática de SQL: o Liquibase pode gerar SQL para um SGBD específico (PostgreSQL, MySQL, Oracle, etc.).
  • Contextos: é possível separar migrações para diferentes ambientes (dev, test, prod).
  • Reversão: cada changeset pode ter uma instrução de reversão (rollback).


Exemplo de uso do Liquibase



Exemplo de changeset no formato XML (db/changelog/db.changelog-master.xml):



<?xml version="1.0" encoding="UTF-8"?><databaseChangeLog    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.9.xsd">

<changeSet id="1" author="pythonlib"> <

Recommendations