Introdução ao Flyway: o que é e para que serve
\n\nFlyway é uma biblioteca para gerenciamento de versões e migrações de bancos de dados (Database Migration Tool). No desenvolvimento moderno de software, especialmente no trabalho em equipe e no uso de metodologias CI/CD, surge a necessidade crítica de sincronizar a estrutura do banco de dados entre desenvolvedores, ambientes de teste e produção. O Flyway resolve esse problema, permitindo descrever alterações no esquema do BD (criação de tabelas, adição de colunas, índices, gatilhos, etc.) na forma de scripts SQL sequenciais e versionados ou classes Java.
\n\nO conceito principal do Flyway é simples: cada migração possui um número de versão único (por exemplo, V1, V2, V3) e é executada exatamente uma vez. A biblioteca rastreia quais migrações já foram aplicadas a um banco de dados específico, usando uma tabela especial (por padrão flyway_schema_history). Isso garante idempotência e reprodutibilidade do estado do banco de dados.
Por que usar o Flyway?
\n- \n
- Versionamento de esquema: Cada alteração no banco de dados é uma versão separada, que pode ser revertida ou aplicada. \n
- Automação: Integração com Maven, Gradle, Spring Boot e pipelines CI/CD. \n
- Controle de integridade: O Flyway verifica as somas de verificação das migrações, prevenindo alterações acidentais em scripts já executados. \n
- Simplicidade: Para a maioria das tarefas, basta escrever um script SQL comum. \n
Instalação do Flyway para Java
\n\nO Flyway não é instalado via pip ou npm, pois é uma biblioteca Java. Existem várias maneiras de adicioná-la ao projeto:
\n\n1. Maven (pom.xml)
\n<dependency>\n <groupId>org.flywaydb</groupId>\n <artifactId>flyway-core</artifactId>\n <version>9.22.3</version> <!-- Versão atual no momento da escrita -->\n</dependency>\n\n<!-- Driver para seu BD, por exemplo PostgreSQL -->\n<dependency>\n <groupId>org.postgresql</groupId>\n <artifactId>postgresql</artifactId>\n <version>42.7.1</version>\n</dependency>\n\n2. Gradle (build.gradle)
\nimplementation 'org.flywaydb:flyway-core:9.22.3'\nimplementation 'org.postgresql:postgresql:42.7.1'\n\n3. Plugin Maven (para execução via linha de comando)
\n<plugin>\n <groupId>org.flywaydb</groupId>\n <artifactId>flyway-maven-plugin</artifactId>\n <version>9.22.3</version>\n <configuration>\n <url>jdbc:postgresql://localhost:5432/mydb</url>\n <user>myuser</user>\n <password>mypassword</password>\n </configuration>\n</plugin>\n\n4. Spring Boot (configuração automática)
\nSe você estiver usando Spring Boot, basta adicionar a dependência e configurar os parâmetros no application.properties:
spring.flyway.enabled=true\nspring.flyway.locations=classpath:db/migration\nspring.datasource.url=jdbc:postgresql://localhost:5432/mydb\nspring.datasource.username=myuser\nspring.datasource.password=mypassword\n\nInício rápido com exemplo de código
\n\nVamos considerar um exemplo mínimo de uso do Flyway em uma aplicação Java para criar a tabela users.
Passo 1: Crie a estrutura de diretórios para migrações
\nPor padrão, o Flyway procura scripts SQL na pasta db/migration no classpath (por exemplo, src/main/resources/db/migration).
Passo 2: Crie o arquivo de migração
\nCrie o arquivo V1__Create_users_table.sql nesta pasta:
CREATE TABLE users (\n id SERIAL PRIMARY KEY,\n username VARCHAR(50) NOT NULL UNIQUE,\n email VARCHAR(10