Utilizando Profiles com SpringBoot

Olá hoje iremos ver como trabalhar com Profiles dentro de aplicações desenvolvidas com SpringBoot.

O que são Profiles

Profiles são recursos para determinar o ambiente onde a aplicação irá executar, e o Spring trabalha com esse tipo de situação de uma maneira muito transparente, e em aplicações onde utilizamos SpringBoot isso se torna ainda mais simples.

Imagine o cenário onde você tenha uma interface e sua implementação muda de acordo com o ambiente de execução, veja o exemplo:
  • Desenvolvimento (dev);
  • Homologação (homolog);
  • Produção (prod).


Criando Profiles

Antes de tudo vamos criar uma aplicação com SpringBoot, caso tenha dúvidas de como criar uma aplicação veja Aqui , abaixo veja como ficou nosso pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>br.com.cvinicius</groupId>
 <artifactId>boot-profile</artifactId>
 <version>1.0.0-SNAPSHOT</version>
 <packaging>jar</packaging>

 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.5.9.RELEASE</version>
 </parent>

 <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <java.version>1.8</java.version>
 </properties>

 <dependencies>
  <dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
  </dependency>
 
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
  </dependency>
 </dependencies>

 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>
</project>

Repare que é uma aplicação básica, e não precisamos de nenhum starter especifico para trabalhar com profiles, pois este recurso já esta embutido no core do Spring Framework.

Vamos criar as seguintes classes e interfaces em nosso projeto:

Interface Message

public interface Message {

    String getMessage();
}

Classe DevMessage

@Profile("dev")
@Component
public class DevMessage implements Message{

 @Override
 public String getMessage() {
  return "Ambiente de Desenvolvimento";
 }
}

Classe HomologMessage

@Profile("homolog")
@Component
public class HomologMessage implements Message{

 @Override
 public String getMessage() {
  return "Ambiente de Homologação";
 }
}

Classe ProdMessage

@Profile("prod")
@Component
public class ProdMessage implements Message{

 @Override
 public String getMessage() {
  return "Ambiente de Produção";
 }
}

Classe MessageApi

@RestController
public class MessageApi{

 @Autowired
 private Message message;
 
 @GetMapping("/")
 public String sendMessage(){
  return message.getMessage();
 }
}

Após criar toda a estrutura basta configurar qual profile vamos utilizar, para isto, basta adicionar uma configuração no arquivo .yml ou .properties para definir qual ambiente o sistema irá executar, a configuração é a seguinte:

server:
  port: 8080
  
spring:
  profiles:
    active: homolog

O valor adicionado na tag active: deve ser o mesmo adicionado na Annotation @Profile.

Ao Executar o sistema com profile "homolog" o resultado será o abaixo:

Resultado exibindo a mensagem da classe HomologMessage.

Faça a troca do profile e perceba que para cada ambiente o Spring irá retornar uma implementação diferente.

Código fonte:


Até a próxima.

Comentários

Popular Posts

Criando arquivos de log com Log4J

Monitorando o Tomcat com Java VisualVM

Gerenciamento de Transações com EJB - Parte 2

Injeção de dependências em Java EE usando @Inject, @EJB e @Resource ?

AngularJS - Formatando Datas com o Filter Date

JBoss AS 7 - Instalação e Configuração

Métodos Utilitários da Classe String

Configurando o arquivo application.properties do SpringBoot

Criando Módulos e DataSources no Wildfly

Criando um Projeto com SpringBoot