{"componentChunkName":"component---src-templates-blog-post-js","path":"/flyway-java/","result":{"data":{"markdownRemark":{"html":"<p>Bancos de dados são ferramentas importantíssimas que são utilizadas na construção de aplicações, existem muitas opções de bancos de dados disponíveis e cada uma atende a uma necessidade específica. Com o advento dos microsserviços e a ideia de cada aplicação administrar o seu próprio estado, os bancos de dados confirmam a sua importância.</p>\n<p>Mas criar, atualizar e deletar colunas e tabelas não é uma tarefa das mais simples em grandes aplicações ou com cenários complexos, o <strong>Flyway</strong> surge como uma ferramenta para facilitar as migrações e o versionamento nos bancos de dados.</p>\n<p>Contudo o <strong>Flyway</strong> não é um bala de prata e nem tem a intenção de substituir a função de um <strong>DBA</strong>, o <strong>FLyway</strong> é uma ferramenta para nos ajudar no dia-a-dia.</p>\n<h2 id=\"Adicionando-o-Flyway-no-projeto\" style=\"position:relative;\">Adicionando o Flyway no projeto<a href=\"#Adicionando-o-Flyway-no-projeto\" aria-label=\"Adicionando o Flyway no projeto permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Vou adicionar o <strong>Flyway</strong> em um <a href=\"https://github.com/guilhermegarcia86/kafka-series/tree/flyway/register\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">projeto</a> que já existe e utiliza o <strong>MySQL</strong> como repositório de dados.</p>\n<p>É uma aplicação <strong>Java</strong> com <strong>Maven</strong> então é só adicionar a dependência no <code class=\"language-text\">pom.xml</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"xml\"><pre class=\"language-xml\"><code class=\"language-xml\"><span class=\"token comment\">&lt;!-- Flyway --></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">></span></span>org.flywaydb<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">></span></span>flyway-core<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<h2 id=\"Configurando-Properties\" style=\"position:relative;\">Configurando Properties<a href=\"#Configurando-Properties\" aria-label=\"Configurando Properties permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>É necessário configurar os dados de conexão do banco no <strong>Flyway</strong>. Como estamos usando <strong>Spring Boot</strong> podemos adicionar isso no arquivo <code class=\"language-text\">application.yml</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"yml\"><pre class=\"language-yml\"><code class=\"language-yml\"><span class=\"token key atrule\">spring</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">flyway</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">url</span><span class=\"token punctuation\">:</span> jdbc<span class=\"token punctuation\">:</span>mysql<span class=\"token punctuation\">:</span>//$<span class=\"token punctuation\">{</span>DATABASE_HOST<span class=\"token punctuation\">:</span>localhost<span class=\"token punctuation\">}</span><span class=\"token punctuation\">:</span>$<span class=\"token punctuation\">{</span>DATABASE_PORT<span class=\"token punctuation\">:</span><span class=\"token number\">3306</span><span class=\"token punctuation\">}</span>/$<span class=\"token punctuation\">{</span>DATABASE<span class=\"token punctuation\">:</span>register<span class=\"token punctuation\">}</span><span class=\"token punctuation\">?</span>createDatabaseIfNotExist=true\n    <span class=\"token key atrule\">user</span><span class=\"token punctuation\">:</span> $<span class=\"token punctuation\">{</span>DATABASE_USER<span class=\"token punctuation\">:</span>root<span class=\"token punctuation\">}</span>\n    <span class=\"token key atrule\">password</span><span class=\"token punctuation\">:</span> $<span class=\"token punctuation\">{</span>DATABASE_PASSWD<span class=\"token punctuation\">:</span>root<span class=\"token punctuation\">}</span>\n    <span class=\"token key atrule\">schemas</span><span class=\"token punctuation\">:</span>\n    <span class=\"token punctuation\">-</span> $<span class=\"token punctuation\">{</span>DATABASE<span class=\"token punctuation\">:</span>register<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Aqui configuramos a <code class=\"language-text\">url</code>, <code class=\"language-text\">user</code>, <code class=\"language-text\">password</code> e o <code class=\"language-text\">schema</code> que o <strong>Flyway</strong> irá usar para se conectar no banco de dados.</p>\n<h2 id=\"Adicionando-os-Scripts\" style=\"position:relative;\">Adicionando os Scripts<a href=\"#Adicionando-os-Scripts\" aria-label=\"Adicionando os Scripts permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Vamos adicionar os scripts que o <strong>Flyway</strong> irá rodar, para isso precisamos criar a pasta dentro de <code class=\"language-text\">resources</code> na nossa aplicação, por padrão o <strong>Flyway</strong> irá procurar pelo caminho <code class=\"language-text\">resources/db/migration</code> então basta criar os diretórios e adicionar os scripts.</p>\n<p>Outro padrão do <strong>Flyway</strong> para gerenciamento de versão dos scripts é a convenção de nomenclatura dos arquivos, eles seguem o padrão <strong>V</strong> seguido do número da versão acompanhado de <code class=\"language-text\">underline</code> exemplo:</p>\n<p><code class=\"language-text\">V1_1__meu-script.sql</code></p>\n<p>Para essa aplicação vamos ter dois scripts iniciais, um para criar as tabelas e outro para executar a carga inicial:</p>\n<p><code class=\"language-text\">V1_0__create_tables.sql</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">create</span> <span class=\"token keyword\">table</span> perfil <span class=\"token punctuation\">(</span>\n    id <span class=\"token keyword\">integer</span> <span class=\"token operator\">not</span> <span class=\"token boolean\">null</span> <span class=\"token keyword\">auto_increment</span><span class=\"token punctuation\">,</span>\n    name <span class=\"token keyword\">varchar</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token keyword\">primary</span> <span class=\"token keyword\">key</span> <span class=\"token punctuation\">(</span>id<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">)</span> <span class=\"token keyword\">engine</span><span class=\"token operator\">=</span><span class=\"token keyword\">InnoDB</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">create</span> <span class=\"token keyword\">table</span> <span class=\"token keyword\">user</span> <span class=\"token punctuation\">(</span>\n    id <span class=\"token keyword\">integer</span> <span class=\"token operator\">not</span> <span class=\"token boolean\">null</span> <span class=\"token keyword\">auto_increment</span><span class=\"token punctuation\">,</span>\n    email <span class=\"token keyword\">varchar</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    pass <span class=\"token keyword\">varchar</span><span class=\"token punctuation\">(</span><span class=\"token number\">255</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token keyword\">primary</span> <span class=\"token keyword\">key</span> <span class=\"token punctuation\">(</span>id<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">)</span> <span class=\"token keyword\">engine</span><span class=\"token operator\">=</span><span class=\"token keyword\">InnoDB</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">create</span> <span class=\"token keyword\">table</span> user_perfis <span class=\"token punctuation\">(</span>\n    user_id <span class=\"token keyword\">integer</span> <span class=\"token operator\">not</span> <span class=\"token boolean\">null</span><span class=\"token punctuation\">,</span>\n    perfis_id <span class=\"token keyword\">integer</span> <span class=\"token operator\">not</span> <span class=\"token boolean\">null</span><span class=\"token punctuation\">,</span>\n    <span class=\"token keyword\">primary</span> <span class=\"token keyword\">key</span> <span class=\"token punctuation\">(</span>user_id<span class=\"token punctuation\">,</span> perfis_id<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">)</span> <span class=\"token keyword\">engine</span><span class=\"token operator\">=</span><span class=\"token keyword\">InnoDB</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">alter</span> <span class=\"token keyword\">table</span> user_perfis <span class=\"token keyword\">add</span> <span class=\"token keyword\">constraint</span> perfil_id_constraint <span class=\"token keyword\">foreign</span> <span class=\"token keyword\">key</span> <span class=\"token punctuation\">(</span>perfis_id<span class=\"token punctuation\">)</span> <span class=\"token keyword\">references</span> perfil <span class=\"token punctuation\">(</span>id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">alter</span> <span class=\"token keyword\">table</span> user_perfis <span class=\"token keyword\">add</span> <span class=\"token keyword\">constraint</span> user_id_constraint <span class=\"token keyword\">foreign</span> <span class=\"token keyword\">key</span> <span class=\"token punctuation\">(</span>user_id<span class=\"token punctuation\">)</span> <span class=\"token keyword\">references</span> <span class=\"token keyword\">user</span> <span class=\"token punctuation\">(</span>id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><code class=\"language-text\">V1_1__init.sql</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\"><span class=\"token keyword\">INSERT</span> <span class=\"token keyword\">INTO</span> register<span class=\"token punctuation\">.</span><span class=\"token punctuation\">`</span><span class=\"token keyword\">user</span><span class=\"token punctuation\">`</span>\n<span class=\"token punctuation\">(</span>email<span class=\"token punctuation\">,</span> pass<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">VALUES</span><span class=\"token punctuation\">(</span><span class=\"token string\">'jonhdoe@email.com'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'$2a$10$JgDI7KttG8BX9AO.3mGTref9mjDxHKtx3sjqnaP3Vq88BzUNxA38S'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">INSERT</span> <span class=\"token keyword\">INTO</span> register<span class=\"token punctuation\">.</span>perfil\n<span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">VALUES</span><span class=\"token punctuation\">(</span><span class=\"token string\">'USER'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">INSERT</span> <span class=\"token keyword\">INTO</span> register<span class=\"token punctuation\">.</span>perfil\n<span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">VALUES</span><span class=\"token punctuation\">(</span><span class=\"token string\">'ADMIN'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">INSERT</span> <span class=\"token keyword\">INTO</span> register<span class=\"token punctuation\">.</span>user_perfis\n<span class=\"token punctuation\">(</span>user_id<span class=\"token punctuation\">,</span> perfis_id<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">VALUES</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"Executando-o-Flyway\" style=\"position:relative;\">Executando o Flyway<a href=\"#Executando-o-Flyway\" aria-label=\"Executando o Flyway permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Quando iniciamos a nossa aplicação o <strong>Flyway</strong> é automaticamente iniciado e executa os scripts, a saída no console da aplicação é parecido com isso:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">INFO <span class=\"token number\">77800</span> --- <span class=\"token punctuation\">[</span>  restartedMain<span class=\"token punctuation\">]</span> o.f.c.internal.license.VersionPrinter    <span class=\"token builtin class-name\">:</span> Flyway Community Edition <span class=\"token number\">7.1</span>.1 by Redgate\nINFO <span class=\"token number\">77800</span> --- <span class=\"token punctuation\">[</span>  restartedMain<span class=\"token punctuation\">]</span> o.f.c.i.database.base.DatabaseType       <span class=\"token builtin class-name\">:</span> Database: jdbc:mysql://localhost:3306/register <span class=\"token punctuation\">(</span>MySQL <span class=\"token number\">8.0</span><span class=\"token punctuation\">)</span>\nINFO <span class=\"token number\">77800</span> --- <span class=\"token punctuation\">[</span>  restartedMain<span class=\"token punctuation\">]</span> o.f.core.internal.command.DbValidate     <span class=\"token builtin class-name\">:</span> Successfully validated <span class=\"token number\">2</span> migrations <span class=\"token punctuation\">(</span>execution <span class=\"token function\">time</span> 00:00.152s<span class=\"token punctuation\">)</span>\nINFO <span class=\"token number\">77800</span> --- <span class=\"token punctuation\">[</span>  restartedMain<span class=\"token punctuation\">]</span> o.f.c.i.s.JdbcTableSchemaHistory         <span class=\"token builtin class-name\">:</span> Creating Schema History table <span class=\"token variable\"><span class=\"token variable\">`</span>register<span class=\"token variable\">`</span></span><span class=\"token builtin class-name\">.</span><span class=\"token variable\"><span class=\"token variable\">`</span>flyway_schema_history<span class=\"token variable\">`</span></span> <span class=\"token punctuation\">..</span>.\nINFO <span class=\"token number\">77800</span> --- <span class=\"token punctuation\">[</span>  restartedMain<span class=\"token punctuation\">]</span> o.f.core.internal.command.DbMigrate      <span class=\"token builtin class-name\">:</span> Current version of schema <span class=\"token variable\"><span class=\"token variable\">`</span>register<span class=\"token variable\">`</span></span><span class=\"token builtin class-name\">:</span> <span class=\"token operator\">&lt;&lt;</span> Empty Schema <span class=\"token operator\">>></span>\nINFO <span class=\"token number\">77800</span> --- <span class=\"token punctuation\">[</span>  restartedMain<span class=\"token punctuation\">]</span> o.f.core.internal.command.DbMigrate      <span class=\"token builtin class-name\">:</span> Migrating schema <span class=\"token variable\"><span class=\"token variable\">`</span>register<span class=\"token variable\">`</span></span> to version <span class=\"token string\">\"1.0 - create tables\"</span>\nINFO <span class=\"token number\">77800</span> --- <span class=\"token punctuation\">[</span>  restartedMain<span class=\"token punctuation\">]</span> o.f.core.internal.command.DbMigrate      <span class=\"token builtin class-name\">:</span> Migrating schema <span class=\"token variable\"><span class=\"token variable\">`</span>register<span class=\"token variable\">`</span></span> to version <span class=\"token string\">\"1.1 - init\"</span>\nINFO <span class=\"token number\">77800</span> --- <span class=\"token punctuation\">[</span>  restartedMain<span class=\"token punctuation\">]</span> o.f.core.internal.command.DbMigrate      <span class=\"token builtin class-name\">:</span> Successfully applied <span class=\"token number\">2</span> migrations to schema <span class=\"token variable\"><span class=\"token variable\">`</span>register<span class=\"token variable\">`</span></span> <span class=\"token punctuation\">(</span>execution <span class=\"token function\">time</span> 00:00.625s<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Aqui podemos ver a mensagem de que o script foi executado com sucesso, mas o que acontece se executarmos a nossa aplicação novamente?</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">INFO <span class=\"token number\">78443</span> --- <span class=\"token punctuation\">[</span>  restartedMain<span class=\"token punctuation\">]</span> o.f.c.internal.license.VersionPrinter    <span class=\"token builtin class-name\">:</span> Flyway Community Edition <span class=\"token number\">7.1</span>.1 by Redgate\nINFO <span class=\"token number\">78443</span> --- <span class=\"token punctuation\">[</span>  restartedMain<span class=\"token punctuation\">]</span> o.f.c.i.database.base.DatabaseType       <span class=\"token builtin class-name\">:</span> Database: jdbc:mysql://localhost:3306/register <span class=\"token punctuation\">(</span>MySQL <span class=\"token number\">8.0</span><span class=\"token punctuation\">)</span>\nINFO <span class=\"token number\">78443</span> --- <span class=\"token punctuation\">[</span>  restartedMain<span class=\"token punctuation\">]</span> o.f.core.internal.command.DbValidate     <span class=\"token builtin class-name\">:</span> Successfully validated <span class=\"token number\">2</span> migrations <span class=\"token punctuation\">(</span>execution <span class=\"token function\">time</span> 00:00.115s<span class=\"token punctuation\">)</span>\nINFO <span class=\"token number\">78443</span> --- <span class=\"token punctuation\">[</span>  restartedMain<span class=\"token punctuation\">]</span> o.f.core.internal.command.DbMigrate      <span class=\"token builtin class-name\">:</span> Current version of schema <span class=\"token variable\"><span class=\"token variable\">`</span>register<span class=\"token variable\">`</span></span><span class=\"token builtin class-name\">:</span> <span class=\"token number\">1.1</span>\nINFO <span class=\"token number\">78443</span> --- <span class=\"token punctuation\">[</span>  restartedMain<span class=\"token punctuation\">]</span> o.f.core.internal.command.DbMigrate      <span class=\"token builtin class-name\">:</span> Schema <span class=\"token variable\"><span class=\"token variable\">`</span>register<span class=\"token variable\">`</span></span> is up to date. No migration necessary.</code></pre></div>\n<p>Podemos ver que os scripts são validados porém o <strong>Flyway</strong> consegue gerenciar se o script já foi executado, isso acontece graças a tabela <em>flyway<em>schema</em>history</em> que guarda as informações dos scripts executados:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token operator\">|</span> instaled_rank <span class=\"token operator\">|</span> version <span class=\"token operator\">|</span> description   <span class=\"token operator\">|</span> <span class=\"token builtin class-name\">type</span> <span class=\"token operator\">|</span> script                  <span class=\"token operator\">|</span> checksum    <span class=\"token operator\">|</span> installed_by <span class=\"token operator\">|</span> installed_on        <span class=\"token operator\">|</span> execution_time <span class=\"token operator\">|</span> success <span class=\"token operator\">|</span>\n<span class=\"token operator\">|</span>---------------<span class=\"token operator\">|</span>---------<span class=\"token operator\">|</span>---------------<span class=\"token operator\">|</span>------<span class=\"token operator\">|</span>-------------------------<span class=\"token operator\">|</span>-------------<span class=\"token operator\">|</span>--------------<span class=\"token operator\">|</span>---------------------<span class=\"token operator\">|</span>----------------<span class=\"token operator\">|</span>---------<span class=\"token operator\">|</span>\n<span class=\"token operator\">|</span> <span class=\"token number\">1</span>             <span class=\"token operator\">|</span> <span class=\"token number\">1.0</span>     <span class=\"token operator\">|</span> create tables <span class=\"token operator\">|</span> SQL  <span class=\"token operator\">|</span> V1_0__create_tables.sql <span class=\"token operator\">|</span> <span class=\"token number\">1225588812</span>  <span class=\"token operator\">|</span> root         <span class=\"token operator\">|</span> <span class=\"token number\">2021</span>-01-11 <span class=\"token number\">17</span>:57:36 <span class=\"token operator\">|</span> <span class=\"token number\">460</span>            <span class=\"token operator\">|</span> <span class=\"token number\">1</span>       <span class=\"token operator\">|</span>\n<span class=\"token operator\">|</span> <span class=\"token number\">2</span>             <span class=\"token operator\">|</span> <span class=\"token number\">1.1</span>     <span class=\"token operator\">|</span> init          <span class=\"token operator\">|</span> SQL  <span class=\"token operator\">|</span> V1_1__init.sql          <span class=\"token operator\">|</span> -1406395169 <span class=\"token operator\">|</span> root         <span class=\"token operator\">|</span> <span class=\"token number\">2021</span>-01-11 <span class=\"token number\">17</span>:57:36 <span class=\"token operator\">|</span> <span class=\"token number\">27</span>             <span class=\"token operator\">|</span> <span class=\"token number\">1</span>       <span class=\"token operator\">|</span></code></pre></div>\n<p>Essa tabela trás informações que servem para o <strong>Flyway</strong> se gerenciar e gerenciar os scripts.</p>\n<h2 id=\"Flyway-em-um-banco-ja-populado\" style=\"position:relative;\">Flyway em um banco já populado<a href=\"#Flyway-em-um-banco-ja-populado\" aria-label=\"Flyway em um banco ja populado permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Se adicionarmos o <strong>Flyway</strong> em uma aplicação que já possui um banco de dados populado ocorrerá um erro, mas podemos resolver isso com uma configuração simples no <code class=\"language-text\">application.yml</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"yml\"><pre class=\"language-yml\"><code class=\"language-yml\"><span class=\"token key atrule\">spring</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">flyway</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">baseline-on-migrate</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span></code></pre></div>\n<h2 id=\"Codigo-fonte\" style=\"position:relative;\">Código fonte<a href=\"#Codigo-fonte\" aria-label=\"Codigo fonte permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Segue o código no <a href=\"https://github.com/guilhermegarcia86/kafka-series/tree/flyway/register\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a></p>","fields":{"slug":"/flyway-java/"},"frontmatter":{"date":"11 de janeiro de 2021","description":"Adicionando o Flyway na aplicação para automatizar o banco de dados","title":"Versionando o banco de dados com Flyway","tags":["Flyway","Spring Boot","Banco de Dados","Java"],"author":"Guilherme Alves","image":{"id":"60864dc3-518a-5457-9beb-a21e8d4e0e00","publicURL":"/static/fcb10b58f3511682b601cdfd150b3350/flyway-java.png","childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsSAAALEgHS3X78AAAB0klEQVQoz3VTa2/aMBTNz98f6KdO+7BqEn1o+1QBrWhR2TSpCptaUCnhkSJKQpeRJ3nZcU5tE0Ko2itZyr32PT7H50YBjzzP5drGNn9b+2i/uqdUE0JIeZAxJmuu6yKKoh1QUaeGAaLrmzrbgStbsCRJZLNt2+UF4tvzPFiWhSzLBCJEGzGXcD9/QTqZ7hgWRCSgaFosDPi+L0F0fvNgMIDjOFC7XYxGY3lhGU86woMDsNnTJuesS4bj8QSqKppGkqGmjXDT6aDVaqHX62HCWTSbFxg8PoKmCUwvQXvsYNjXoWtzqM8BaMZKpkqapqCUyoKQdd1uy3VxeYnVaiNfnDFME0kcC2Vo9pf41jUxWcUw3QisYo6CSojH//Wzg/b1FXr3d4WlbOcuX7ec0cnfJT7VNbSG/2H4acX5wpSEZrjRLNzNXTxMuYz+EC+2DytIEaYUcztEQjLZGExnsP85sFMG3XRhrYK9UZKATkhwfm+iwaWc/TFQUxc46y5w9HuG2u2cy4olP8EwPD1F+PUI68NDkEYd0fGxrO+5TLlLjM+SFxN4ESmMy+Vjv/hJKVc0BLUTBN9/YH1ex5qbta439oZ7b7Df+yuqec7NYWGI92Ir+RW10kRG1YJ2rgAAAABJRU5ErkJggg==","aspectRatio":1.7582417582417582,"src":"/static/fcb10b58f3511682b601cdfd150b3350/5cd30/flyway-java.png","srcSet":"/static/fcb10b58f3511682b601cdfd150b3350/c67b7/flyway-java.png 320w,\n/static/fcb10b58f3511682b601cdfd150b3350/d3930/flyway-java.png 640w,\n/static/fcb10b58f3511682b601cdfd150b3350/5cd30/flyway-java.png 689w","sizes":"(max-width: 689px) 100vw, 689px"}}}},"timeToRead":5}},"pageContext":{"slug":"/flyway-java/","previous":{"fields":{"slug":"/kafka-producer-avro/"},"frontmatter":{"title":"Produzindo mensagens com Kafka e Schema Registry","date":"01 jan, 2021"}},"next":{"fields":{"slug":"/kafka-consumer/"},"frontmatter":{"title":"Consumindo mensagens do Kafka sem dor de cabeça","date":"18 jan, 2021"}}}},"staticQueryHashes":["63159454"]}