Empacotando profiles diferentes com Spring Boot e Maven

Nas minhas pesquisas, eu pude entender que há como realizar profiling da aplicação (ex. homologação e produção) de duas formas, via maven e spring-boot. A grande questão é que eu tenho multiplos perfis e gostaria de empacotar cada um corretamente. Qual devo usar? Como devo usar esse recurso?

Na verdade,se você quer já empacotar em um profile específico, você utilizará os dois.

A primeira forma é através do próprio Spring Boot, criando vários arquivos .properties no modelo applications-{profile}.properties

Por exemplo, temos um arquivo para configuração do ambiente de produção application-prd.properties e um arquivo para configuração do ambiente de homologação application-hml.properties

E para que a aplicação use as configurações de produção ou de ambiente, deve-se acrescentar no comando java:

java -jar -Dspring.profiles.active={profile} aplicacao.jar

Por exemplo:

java -jar -Dspring.profiles.active=prd aplicacao.jar

Até aqui conseguimos executar nossa aplicação em cada profile que tivermos. Mas perceba que esse recurso de profiling do spring boot é para ser utilizado em tempo de execução (runtime) e não te possibilita a fazer packaging já em um profile específico. É nesse caso que entra o profiling do maven no arquivo pom.xml:

<profiles>
        <profile>
            <id>lcl</id>
            <properties>
                <activatedProperties>lcl</activatedProperties>
            </properties>
        </profile>
        <profile>
            <id>hml</id>
            <properties>
                <activatedProperties>hml</activatedProperties>
            </properties>
        </profile>
        <profile>
            <id>prd</id>
            <properties>
                <activatedProperties>prd</activatedProperties>
            </properties>
        </profile>
</profiles>

Mas isso não basta, tudo o que fizemos ali foi criar uma “variável” chamada activatedPropertiesque dependendo do profile recebe um valor. Diante disso, vamos criar um application.properties, que é o arquivo de configuração default para leitura do Spring Boot e será lido no lugar dos outros 3 que criamos e vamos informar lá a variável do spring spring.profiles.active, a que estávamos configurando durante o modo de execução, e passar essa “variável” activatedProperties. Nosso arquivo application-properties.xml ficaria assim:

spring.profiles.active=@activatedProperties@

O maven não fará a substituição da “variável” delimitada entre os @s enquanto não informarmos para ele filtrar esses arquivos. Sendo assim, também no pom.xml adicionaremos um <resource>:

<build>

    ...

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

Pronto, agora sim. Podemos fazer o package através do comando:

mvn package -P{profile}

Por exemplo:

mvn package -Pprd

Quando formos executar esse comando acontecerá basicamente o seguinte:

  • Comando mvn package -Pprd é executado.
  • O maven irá ver qual o profile estamos solicitando através de -P{profile} que é o profile prd.
  • O maven irá descobrir o valor da variável activatedProperties daquele profile.
  • O maven irá scanear todos os arquivos dentro de src/main/resources e identificará no arquivo application.properties o delimitador @activatedProperties@ e irá literalmente substituir pelo valor a variável activatedProperties.
  • Spring Boot irá ser executado
  • Spring Boot irá fazer a leitura do arquivo de configuração default application.propertiesencontrado.
  • Nesse arquivo haverá a seguinte configuração: spring.profiles.active=prd e, com isso, o arquivo application-prd.properties será lido.

 

Um comentário em “Empacotando profiles diferentes com Spring Boot e Maven

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s