Flyway e Spring Boot: como gerenciar a evolução do banco de dados de forma automatizada e integrada

Por Gaspar Barancelli Junior em 01 de março de 2023

O Flyway é uma ferramenta de controle de versão para bancos de dados, que permite aos desenvolvedores gerenciar a evolução de seus esquemas de banco de dados de forma automatizada e controlada. O Flyway é um software de código aberto e suporta vários bancos de dados, incluindo Oracle, PostgreSQL, MySQL, SQL Server, entre outros.

O objetivo principal do Flyway é ajudar os desenvolvedores a gerenciar as mudanças em seus bancos de dados de forma consistente, garantindo que todas as alterações sejam controladas, rastreadas e versionadas. Com o Flyway, os desenvolvedores podem automatizar a execução de scripts de migração e garantir que as mudanças em seus esquemas de banco de dados sejam aplicadas de forma correta e segura.

Entre as principais vantagens do Flyway estão a facilidade de uso, a integração com ferramentas de construção (como o Maven e o Gradle), a geração automática de scripts de migração, o suporte a rollbacks e a possibilidade de customizar as configurações de migração de acordo com as necessidades de cada projeto.

Em resumo, o Flyway é uma ferramenta essencial para desenvolvedores que precisam gerenciar a evolução de seus esquemas de banco de dados de forma automatizada e controlada.

Como configurar o Flyway em um projeto Spring Boot

A primeira coisa que você precisa fazer é adicionar o Flyway ao seu projeto. Para isso, adicione a seguinte dependência ao seu arquivo pom.xml:

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
    <version>9.15.1</version>
</dependency>

Em seguida, adicione as seguintes propriedades no arquivo application.properties que se encontra pasta src/main/resources.

# Propriedades de configuração de acesso ao banco de dados por JDBC
spring.datasource.url=jdbc:postgresql://localhost:5432/meu_banco_de_dados
spring.datasource.username=meu_usuario
spring.datasource.password=minha_senha
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

# Configuração do Flyway
spring.flyway.locations=classpath:db/migration

Observe que estamos definindo a URL, nome de usuário e senha do banco de dados, bem como o dialeto do Hibernate para PostgreSQL. Além disso, estamos configurando o Flyway para buscar as migrações na pasta db/migration.

Em seguida, crie uma pasta chamada db/migration na pasta src/main/resources. Esta pasta irá conter os scripts de migração do Flyway. Por padrão, o Flyway procura por scripts com o nome no formato V<versão>__<descrição>.sql.

Por exemplo, se você quiser criar um script para adicionar uma nova tabela chamada clientes, crie um arquivo chamado V1__criar_tabela_clientes.sql na pasta db/migration e adicione o seguinte conteúdo:

CREATE TABLE clientes (
  id SERIAL PRIMARY KEY,
  nome VARCHAR(50),
  email VARCHAR(100)
);

A primeira parte do nome do arquivo (V1) indica a versão do script. Você pode usar um número ou uma sequência alfabética para controlar a ordem dos scripts. A segunda parte (criar_tabela_clientes) é uma descrição opcional do script.

Com essa configuração, o Flyway será capaz de ler o datasource configurado no Spring Boot e executar as migrações de forma automática quando a aplicação for iniciada.

Como é feito o controle de execução dos scripts pelo Flyway

O Flyway cria uma tabela especial no banco de dados para controlar o histórico das migrações executadas, chamada de "flyway_schema_history".

A tabela "flyway_schema_history" mantém um registro de todas as migrações que foram executadas, incluindo o número da versão, descrição, data e hora da execução, bem como o checksum (hash) da migração. Essa tabela é fundamental para que o Flyway possa determinar quais migrações precisam ser executadas e em que ordem.

Além disso, o Flyway também pode criar uma tabela adicional chamada "flyway_lock", que é usada para controlar o bloqueio do banco de dados durante a execução das migrações. Essa tabela é opcional e é usada apenas se você estiver executando migrações em um ambiente distribuído, onde vários nós podem tentar executar as migrações simultaneamente.

Conclusão

O Flyway é uma ferramenta valiosa para os desenvolvedores que precisam gerenciar a evolução de seus esquemas de banco de dados de forma controlada e automatizada. O Flyway suporta vários bancos de dados e é fácil de usar, com integração com ferramentas de construção e possibilidade de customização das configurações de migração. A criação automática de scripts de migração, o suporte a rollbacks e o controle de execução dos scripts pelo Flyway tornam a evolução do banco de dados mais segura e consistente. Com o Flyway, os desenvolvedores podem manter o controle sobre a evolução do esquema do banco de dados e garantir que as mudanças sejam aplicadas de forma correta e segura.

// Livros recomendados relacionados ao assunto do post

// Compartilhe esse Post