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 profileprd. - O maven irá descobrir o valor da variável
activatedPropertiesdaquele profile. - O maven irá scanear todos os arquivos dentro de
src/main/resourcese identificará no arquivoapplication.propertieso delimitador@activatedProperties@e irá literalmente substituir pelo valor a variávelactivatedProperties. - 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=prde, com isso, o arquivoapplication-prd.propertiesserá lido.
Top cara!! Simples e direto ao ponto!! Valeeeeu 😀
CurtirCurtir