Olá Pessoal,
No post de hoje vou mostrar para vocês como podemos automatizar a criação de um banco de dados usando o plugin flyway. Aqui na ITS temos usado o plugin para aumentar a produtividade e sempre manter a integridade dos ambientes.
Lets go…
O problema
Há várias ferramentas e formas de automatizar a criação das tabelas do banco com cenários já prontos ou até vazios. Aqui na ITS, para os projetos Java temos usado o flyway, apesar de que testamos outras como o DBMaintain, mas optamos pelo plugin flyway, já que em termos de resultado final era semelhante ao dbmaintain, porém a curva de aprendizado e configuração era mais rápida. Para projetos Ruby, estamos vendo outra solução.
O problema que tínhamos aqui era a criação da base de dados para cada ambiente, desde local até ambiente de INT, DEV e PROD. A modelagem do banco pode mudar (e certamente vai) e quando isso acontece, o problema está feito. Como atualizar cada ambiente rapidamente?
Opção 1
Criar um dump do banco e rodar o .sql em cada ambiente manualmente.
Opção 2
Automatizar esse processo de update.
Nesse post vamos nos limitar apenas em como gerar a base de dados rapidamente. Em outro post veremos como atualizar outros ambientes através de uma ferramenta de build continuous como o Jenkins.
A opção 1 funciona, mas não é a ideal, pois é preciso logar em cada ambiente e rodar o .sql. Isso consome tempo e é chato de fazer, ninguém gosta de fazer esse trabalho repetitivo. E se o banco durante o dia mudar 3 ou 4 vezes? Quantas vezes você vai executar a opção 1? Se você tem 3 ambientes para atualizar será preciso fazer isso 3 vezes a cada mudança. Péssimo, não?
A opção 2
Você pode automatizar. Há ferramentas que ajudam a fazer isso usando um Servidor de Build como o Jenkins ou até como plugin maven. Já usei o dbmaintain, mas analisando outras opções encontrei o flyway, até porque o desenvolvedor pode rodar o plugin local e se tiver o banco de dados rodando em segundos ele tem o ambiente local atualizado.
Configurando o FlyWay via Maven
Antes de tudo você precisa ter um arquivo .sql que irá criar as tabelas e ele deve estar nessa estrutura: src/main/resources/db/migration
E o nome do arquivo tem que ser V1__QUALQUERNOME.sql
São 2 underscore. Se seu banco mudou você precisa ter um V2 e assim por diante. O flyway faz um tracking disso e salva em uma tabela schema_version. Se você tem mais de um ambiente, sugiro dar uma lida nesse post:
http://lwandersonmusings.blogspot.com/2012/07/using-maven-to-integrate-flyway.html
Vamos ver na prática um simples exemplo. Vou considerar que você já tem um projeto Maven
Step 1
Abra o pom e adicione:
<plugin> <groupId>com.googlecode.flyway</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>2.2.1</version> <configuration> <url>jdbc:mysql://localhost:3306/seu_database</url> <user>camilo </user> <password>2014</password> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.25</version> </dependency> </dependencies> </plugin>
Step 2
Garanta que o banco foi inicializado.
Step 3
Garanta que o database exista, caso contrário o flyway não vai conseguir conectar.
Step 4
via command line (se preferir pode usar o Eclipse) digite o seguinte comando:
Step 5
Veja o resultado:
Observe que as tabelas foram criadas. Tive que ocultar os nomes das tabelas.
Simples não?
Alguns comandos básicos
mvn flyway:clean
Limpar o Database, ou seja, todas tables são apagadas.
mvn flyway:info
Mostra quando o último script foi rodado e o status.
mvn flyway:migrate
Faz a migração, ou melhor, executa o .sql em si.
Note: Você pode usar o recurso de profiles e ter diferentes execuções para o flyway.
O flyway tem se mostrado um plugin muito bom no dia a dia e atendendo aos requisitos que precisamos, sem falar que tem uma boa documentação e os posts no blog deles tem sido bem mão na massa.
Abraços, see ya!!
cara amigo au tentar realizar a operação recebo a seguinte mensagem de erro
Unable to determine URL for classpath location: db/migration