Pular para o conteúdo principal

Utilizando Profiles com Spring Boot

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 Spring Boot, 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

Postagens mais visitadas deste blog

Utilizando LocalDate, LocalDateTime e LocalTime na Prática

Tudo bem pessoal, hoje iremos avaliar e analisar operações de manipulação de Datas envolvendo a JavaTime API introduzida no Java 8.

Exemplos da java.time API
Já se passaram alguns anos desde o lançamento do Java 8 e mesmo após este período, há empresas que desconhecem o poder da java.time API, esta foi uma nova API de datas introduzida no Java 8 visando resolver problemas que tínhamos com as velhas classes Date e Calendar.

Vamos mostrar vários exemplos práticos do uso da API:
Criação de objetos No exemplo abaixo, estamos criando os objetos para manipulação de datas, perceba que temos 3 tipos, sendo LocalDate para manipular datas, LocalDateTime para manipular data/hora e LocalTime para horas:
LocalDate localDate = LocalDate.now(); LocalDateTime localDateTime = LocalDateTime.now(); LocalTime localTime = LocalTime.now();
Utilizando formatação Aqui realizamos a operação de formatação, perceba que não foi necessário utilizar a classe SimpleDateFormat, que usaríamos em conjunto com D…

Lendo e Manipulando arquivos CSV com Java

Olá hoje veremos como realizar a leitura e manipulação de arquivos CSV com Java, mostrando que as novas versões da plataforma Java deixaram algumas tarefas simples de serem realizadas.

Exemplo de Arquivo Hoje em dia é comum ao realizar integrações ou carga de dados o uso de arquivos CSV, isto porque, este arquivo possui uma estrutura de fácil entendimento e simples de manipular na maioria das plataformas de desenvolvimento.

Para realizar a leitura dos dados vamos manipular um arquivo com as seguintes colunas: namecpfagephone address:

name;cpf;age;phone;address caio;123456789;20;1145223643;AvenidaPaulista vinicius;147852369;18;1125253625;AvenidaManoel sandra;963258741;30;1174587858;RuaTeixeira regina;125478522;40;1145254536;RuaFernando fernando;785245563;42;1145253669;RuaPereira augusto;456123014;50;1125363633;AvenidaPaulinia maria;456123789;10;1125455525;AvenidaNossaSenhora
Para representar os dados em objetos Java iremos utilizar a seguinte classe:

importlombok.AllArgsConstruc…

Versionamento de Banco Dados com Flyway

Olá pessoal, hoje iremos analisar e aprender como realizar o versionamento e gerenciamento das bases de dados relacionais utilizando o framework Flyway.

Versionamento de Banco Dados Ao trabalhar com desenvolvimento de sistemas é comum realizarmos o versionamento, isso porque uma aplicação pode necessitar de correções, novas funcionalidades e evoluções, onde para garantir a compatibilidade e cuidar do seu ciclo de vida, geramos versões onde é especificado quais itens estão presentes em cada release.
Vamos imaginar seguinte cenário: Sistema ERP1.0.0: Entrega dos módulos Financeiro e RH;1.1.0: Entrega do módulo Contas a Receber. Perceba que a ideia é controlar o que cada versão possui de diferente, e para controlar essas mudanças no lado da aplicação existem várias técnicas e ferramentas, mas e para controlar as mudanças no lado do Banco de dados ? 
Para isso podemos utilizar ferramentas de versionamento que ajudam a realizar este controle, a ferramenta que iremos utilizar é o Flyway.
Con…