Pular para o conteúdo principal

Implantando o Flyway em sistemas Java - Parte 1

 

Quando temos uma empresa terceirizada de fábrica de software desenvolvendo, geralmente especificamos no edital de licitação que essa empresa precisa entregar alguns artefatos obrigatórios para poder receber pelos serviços prestados: o código-fonte (óbvio!), diagramas UML (quando necessário), evidências de testes (artefato que cada vez mais me convenço que de nada serve)... e um plano de implantação. Esse plano de implantação precisa trazer os passos necessários para colocar o produto no ambiente de homologação (e, posteriormente, no ambiente de produção). Na maioria das vezes, um ou mais scripts de banco de dados que devem ser executados. Nós, servidores, tínhamos que abrir o plano de implantação, verificar os passos, acessar o versionador, abrir a ferramenta de banco de dados, copiar o(s) script(s), executá-los, tudo manualmente, gerando um trabalhinho chato e propenso a erros.

Além disso, os scripts sempre ficavam meio perdidos: as vezes espalhados por pastas relativas às ordens de serviço, outras vezes em uma pasta específica do código-fonte do projeto. A ordem de execução dos scripts precisava ser mantida de forma artificial (olhando para os passos do plano de implantação), e reconstruir um ambiente a partir desses scripts era uma tarefa muito difícil, quase impossível.

Adicione a essa equação o nosso eterno desejo de versionar os objetos de banco de dados, que nunca foi realizado por não termos encontrado uma ferramenta que facilitasse / garantisse o versionamento. Até que esbarramos no Flyway (chegamos a avaliar também o Liquibase, mas consideramos o Flyway mais simples de se utilizar em projetos já existentes), um produto open source que se integra perfeitamente ao Maven e permite esse controle dos scripts de banco. Com algum estudo e pouco tempo de implementação, passamos a utilizar essa ferramenta que tem nos garantido bons resultados.

No padrão para o Maven, o Flyway é um plugin que é declarado no pom.xml e pode ser configurado a partir de um driver JDBC para acessar o banco de dados e executar os scripts. Na primeira execução, a ferramenta criará uma tabela de controle (você pode escolher o nome da tabela) que guardará a versão em que se encontra o banco. Os scripts devem ficar localizados na pasta src/main/resources/db/migration (também podemos escolher outra pasta) e podemos ter scripts incrementais e também scripts que o Flyway chama de repeatable - caso de views, stored procedures e similares que podem ter várias versões, e um checksum guardado na tabela de controle é comparado ao checksum do script para detectar uma alteração e forçar uma atualização.

O plugin do Flyway para o Maven possui alguns goals que realizam as principais tarefas:

  • migrate - é o principal, realiza o trabalho de ler os scripts da pasta, ler o conteúdo da tabela de controle e realizar o batimento, determinando quais scripts devem ser executados no banco de dados.
  • clean - cuidado com esse, ele apaga os objetos existentes no schema de banco de dados!
  • info - uma forma de consultar as migrações já executadas.
  • validate - realiza a validação das migrações já executadas.
  • baseline - outro muito importante, permite introduzir a ferramenta em um projeto já existente e com tabelas já criadas no banco de dados.

No próximo post, eu entrarei em mais detalhes sobre como configurar um projeto Maven para passar a utilizar o Flyway!


Comentários

Postagens mais visitadas deste blog

Maven - Versão nova lançada

  Saiu versão nova do Maven - 3.8.2. Esta foi apenas uma versão de correção de bugs, mas a versão anterior, a 3.8.l, foi uma versão importante e vou aproveitar para falar sobre ela. Quem acompanha o histórico de versões do Maven , deve ter percebido o pulo de versão, da 3.6.3 para esta 3.8.1. A razão está explicada neste link , e o grande motivo foi tentar evitar problemas de segurança pelo acesso a repositórios via protocolo HTTP. Por default, esta versão 3.8.1 do Maven bloqueia o acesso a repositórios HTTP - você precisa acessar repositórios HTTPS . O bloqueio acontece com a adição de um mirror chamado "maven-default-http-blocker", bloqueando todo e qualquer acesso a repositórios HTTP externos. <mirror>    <id>maven-default-http-blocker</id>    <mirrorOf>external:http:*</mirrorOf>   <name>Pseudo repository to mirror external repositories initially using HTTP.</name>    <url>http://0.0.0.0/</u...

REST Assured

Recentemente, fiz uma apresentação no meu trabalho falando sobre o framework REST Assured, que permite construir testes unitários que verificam o funcionamento de serviços REST. Confira a apresentação abaixo!

Jakarta EE 10, A nova versão corporativa do Java

Mais de um ano atrás, fiz um post sobre o lançamento da versão 9.1 do Jakarta EE (confira esse post aqui ). Nesse post, eu expliquei um pouco sobre a transferência do Java EE da Oracle para a Eclipse Foundation e a mudança necessária ocorrida nessa versão no nome dos pacotes: de javax para jakarta . Agora, acabou de sair uma nova versão do Jakarta EE , versão 10 , a primeira versão que verdadeiramente traz novidades nas especificações que tanto conhecemos: JPA agora evoluiu para a versão 3.1; CDI para a versão 4.0; JAX-RS  para a versão 3.1; e assim por diante. Foram mais de vinte especificações atualizadas / evoluídas nesta versão, que criou também um novo perfil de implementação. Agora, temos três perfis para implementação do Jakarta EE :  Jakarta EE 10 Platform , o perfil completo com todas as especificações (este perfil somente os servidores de aplicação costumam implementar, como Wildfly e Glassfish ); Jakarta EE 10 Web Profile , um perfil com especificações volta...