Ao final do post anterior (segunda parte da série sobre o Flyway), deixamos três problemas para serem resolvidos na nossa implantação do Flyway no nosso projeto. Eis os problemas que foram expostos:
- Senhas expostas no arquivo pom.xml;
- Como diferenciar ambientes diferentes para o projeto;
- Scripts incluídos no arquivo jar / war gerado.
Vamos às soluções para esses problemas!
Problema 1 - senhas expostas:
A solução para este problema se dá em duas partes. Primeiramente, removemos as credenciais de acesso do pom.xml e colocamos no arquivo settings.xml do Maven. Esse arquivo traz toda a configuração do framework e fica localizado na subpasta conf da pasta de instalação. Localize a seção <servers> no arquivo, e adicione uma entrada <server>, contendo um identificador para essa entrada, mais o usuário e a senha. Como no exemplo abaixo:
<server><id>ripando</id>
<username>usrmusica</username>
<password>usrmusica</password>
</server>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>7.7.3</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
</dependencies>
<configuration>
<driver>com.mysql.cj.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306/musicas?serverTimezone=UTC</url>
<serverId>ripando</serverId>
...
</configuration>
</plugin>
Com a senha master, já podemos substituir as senhas no arquivo settings.xml por senhas criptografadas, usando exatamente o mesmo comando. Pronto! As senhas não estão mais expostas! Primeiro problema resolvido. Vamos ao segundo.
Problema 2 - diferenciando ambientes:
A solução para diferenciar ambientes no Maven é o uso de profiles. Um profile (perfil) consiste em um conjunto de configurações que poderão se diferenciar por uma série de fatores: através da ativação de um dos profiles, presença ou não de uma variável de ambiente, dentre muitas outras opções. A opção que mais utilizo é a ativação do profile desejado na execução do build. Podemos fazer isso com a opção -P do Maven. Assim: mvn -Phmg clean install.
Para criar um profile no seu pom.xml, adicione uma seção <profiles>, e para cada profile diferente, adicione uma subseção <profile>. Vamos criar dois profiles para o nosso projeto:
<profiles><profile>
</profile>
<profile>
</profiles>
Veja que criamos os dois profiles com os ids dev e prod. Diferenciamos a URL JDBC de conexão ao banco e também o serverId. Para cada serverId relacionado no seu pom.xml, não se esqueça de adicionar a respectiva entrada no arquivo settings.xml.
Agora, precisamos alterar a configuração do plugin do Flyway, para passar a referenciar as properties contidas nos profiles. Você referencia uma property no Maven com a sintaxe ${<nome da property>} (parecido com Javascript e substituição de variáveis em strings delimitadas por ``).Ver abaixo:
<configuration><driver>com.mysql.cj.jdbc.Driver</driver>
<url>${database.url}</url>
<serverId>${database.serverId}</serverId>
</configuration>
Pronto! Agora podemos diferenciar nosso ambiente de desenvolvimento do nosso ambiente de produção e realizar os builds apropriados. Um último ponto: se quisermos deixar um dos profiles como profile default, adicionamos o seguinte trecho XML no profile:
<profile>...
<activation>
<activeByDefault>true</activeByDefault>
</activation>
...
</profile>
Dessa forma, se não mencionarmos nenhum profile ao executar o build no Maven, esse profile será ativado por default. Vamos agora resolver o terceiro e último problema.
Problema 3 - não incluir scritps no arquivo jar/war gerado:
Este problema é o menos grave e o mais simples de ser resolvido. O Maven permite excluir arquivos do build, baseado em uma configuração. Na seção <build>, adicione uma subseção <resources> com uma subseção <resource> que configura os arquivos a serem copiados da pasta /src/main/resources. Desse jeito:
<build><resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>db/migration/*.*</exclude>
</excludes>
<filtering>false</filtering>
</resource>
</resources>
...
Comentários
Postar um comentário