Flyway versiona o schema do banco de dados da mesma forma que o Git versiona o codigo fonte. Cada migracao e um arquivo SQL que o Flyway executa na ordem certa.
Adicione a dependencia no build.gradle.kts:
implementation("org.flywaydb:flyway-core")
runtimeOnly("org.flywaydb:flyway-database-postgresql")
Com Spring Boot, a configuracao e simples:
# application.properties
spring.flyway.enabled=true
spring.flyway.locations=classpath:db/migration
Crie o primeiro arquivo de migracao em src/main/resources/db/migration/V1__criar_tabela_usuarios.sql:
CREATE TABLE usuarios (
id BIGSERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL,
criado_em TIMESTAMP DEFAULT NOW()
);
A segunda migracao V2__adicionar_coluna_telefone.sql:
ALTER TABLE usuarios ADD COLUMN telefone VARCHAR(20);
O padrao de nome e V{numero}__{descricao}.sql. O Flyway executa em ordem numerica e nunca repete o mesmo arquivo.
Para rodar as migracoes manualmente:
./gradlew flywayMigrate
Para ver o status:
./gradlew flywayInfo
Isso mostra quais migracoes ja foram aplicadas e quais estao pendentes.
Flyway cria uma tabela chamada flyway_schema_history no banco. Ela registra cada migracao executada:
SELECT version, description, installed_on, success
FROM flyway_schema_history;
Se uma migracao falha, o Flyway marca como falha e nao continua. Voce precisa corrigir o erro e rodar flywayRepair antes de tentar de novo.
Para migracoes irreversiveis, adicione o script de rollback separadamente:
# V3__adicionar_tabela_pedidos.sql
CREATE TABLE pedidos (
id BIGSERIAL PRIMARY KEY,
usuario_id BIGINT REFERENCES usuarios(id),
total DECIMAL(10,2) NOT NULL,
criado_em TIMESTAMP DEFAULT NOW()
);
# V3.1__rollback_V3.sql
DROP TABLE IF EXISTS pedidos;
O Flyway nao executa rollbacks automaticamente. Mas ter o script pronto ajuda em emergencias.
Para ambientes com dados reais, nunca altere migracoes ja executadas. Crie uma nova migracao:
-- ERRADO: alterar V2__adicionar_coluna_telefone.sql depois de rodar
-- CERTO: criar V4__alterar_coluna_telefone.sql
ALTER TABLE usuarios ALTER COLUMN telefone TYPE VARCHAR(30);
Voce pode usar Flyway com SQL puro ou com Java para logicas complexas. Mas SQL puro e mais simples e funciona em qualquer banco.
That's all for now.
Thanks for reading!
Top comments (0)