Texto de: Geraldo Daros
O que é o Flyway?
Flyway é uma ferramenta de migração de banco de dados baseada em código aberto. Ela permite que os desenvolvedores gerenciem a evolução do banco de dados de maneira confiável, automatizada e incremental. Isso significa que, em vez de fazer mudanças manuais no banco de dados, os desenvolvedores podem escrever scripts SQL simples que podem ser executados automaticamente pelo Flyway. Esses scripts são versionados e gerenciados pelo Flyway, permitindo que a equipe de desenvolvimento acompanhe as alterações no banco de dados.
Como o Flyway funciona?
O Flyway funciona por meio de uma abordagem baseada em migrações. Uma migração é um conjunto de scripts SQL que implementam uma alteração no banco de dados. Essas migrações são versionadas e organizadas em ordem cronológica. Quando o Flyway é executado, ele verifica o estado atual do banco de dados e aplica as migrações necessárias para levá-lo à versão mais recente.
Além disso, essa ferramenta fornece suporte para vários bancos de dados, incluindo PostgreSQL, MySQL, Oracle, Microsoft SQL Server e muitos outros.
Como usar o Flyway em um projeto Java com Spring Boot?
Usar o Flyway em um projeto Java é relativamente simples. Para este projeto usaremos o Maven, mas também pode ser usado com o Gradle. Vamos criar um projeto do 0 usando o site start.spring.io e já adicionar dependências necessárias para usar o Flyway. Caso você já tenha um projeto criado e não deseja criar outro, basta fazer os mesmos procedimentos, porém tudo que o Spring Boot gerar, você precisará fazer a mão. Irei avisar quando for necessário fazer algo nesse sentido no decorrer do artigo.
O projeto gerado já virá com a estrutura base para utilizarmos o Flyway, com a pasta db/migration já criada, dessa forma:
Por padrão, o Flyway vai buscar as migrations dentro de resources/db/migration, porém a gente pode alterar esse comportamento usando spring.flyway.locations=filesystem:db/migration
. Essa propriedade deve ser adicionada ao application.properties
para que o Flyway entenda que as migrations irão estar na pasta raiz da aplicação, junto da pasta src. Como a pasta db/migration é gerada pelo Spring Boot na hora da criação do projeto, se você está usando um projeto que já foi criado, você precisará criar as pastas manualmente, e, para adicionar o Flyway ao projeto já existente, é necessário a adição dessa dependência aqui:
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
Configurando application.properties
Para configurar o nosso projeto para trabalhar com o Flyway, precisamos dessas duas propriedades no nosso properties:
#Essa propriedade serve para ativarmos o Flyway
spring.flyway.enabled=true
#Essa propriedade para criar uma tabela com as migrações e assim ter acesso ao histórico de modificações.
spring.flyway.baseline-on-migrate=true
Criando migrations
Considerando que o banco de dados já esteja configurado corretamente no seu projeto, vamos criar as migrations, como o Flyway espera que essas migrations estejam dentro de db/migration, precisamos criar um arquivo com a migration desejada, ou seja, com os scripts SQL desejado e deixar o Flyway fazer o trabalho. O nome do arquivo SQL deve seguir o padrão V{version}__{description}.sql, onde {version} é um número de versão e {description} é uma descrição curta da migração. Você pode ler sobre a padronização de nomenclatura na parte de naming da documentação oficial.
Por exemplo, se você quiser adicionar uma nova tabela ao seu banco de dados, pode criar um arquivo chamado V1__create_table_produtos.sql. O conteúdo deste arquivo seria o SQL para criar a nova tabela de produtos. Exemplo:
CREATE TABLE produtos
(
id INTEGER PRIMARY KEY,
valor DECIMAL(6, 2),
nome VARCHAR(266)
);
Quando você executar o projeto, o Flyway executará esse script e adicionará a tabela ao banco de dados. Se você tentar alterar o conteúdo do arquivo V1__create_table_produtos.sql, e executar o projeto, ele irá gerar erro, porque essa versão já foi inserida no banco de dados, para fazer uma nova alteração é necessário criar um novo arquivo de uma versão posterior para realizar a mudança, ou então, resetar o banco de dados.
Conclusão
Em resumo, o Flyway emerge como uma ferramenta robusta e eficaz para simplificar a gestão de migrações de banco de dados em ambientes de desenvolvimento profissional. Ao automatizar o processo de evolução do esquema do banco de dados, o Flyway permite que nós desenvolvedores implementemos alterações de forma confiável e incremental, utilizando scripts SQL versionados e organizados cronologicamente.