O uso de perfis em aplicações é altamente recomendado por facilitar o desenvolvimento da aplicação bem como sua publicação. Através de perfis é possível ter configurações separadas por ambiente, sendo estes alguns exemplos:

  • Banco de dados (tipo de banco, endereço)
  • Logs (níveis de log e tipos de saída)
  • Configurações de build e deploy (maven)

Neste post, será demonstrada a configuração de perfis integrados ao Maven para uma aplicação Spring Boot, o que facilita o trabalho em IDEs como o Netbeans, que permite a rápida escolha do perfil a ser utilizado.

Criando os perfis no pom.xml

Os dois perfis dev e prod foram definidos na seção profiles, sendo o perfil dev ativado por padrão.

    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- log configuration -->
                <logback.loglevel>DEBUG</logback.loglevel>
                <!-- default Spring profiles -->
                <spring.profiles.active>dev</spring.profiles.active>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-devtools</artifactId>
                    <optional>true</optional>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <!-- log configuration -->
                <logback.loglevel>INFO</logback.loglevel>
                <!-- default Spring profiles -->
                <spring.profiles.active>prod</spring.profiles.active>
            </properties>
        </profile>
    </profiles>

Arquivos de perfis

application.yml

spring:
    application:
        name: horacerta
    profiles:
        # The commented value for `active` can be replaced with valid Spring profiles to load.
        # Otherwise, it will be filled in by maven when building the WAR file
        # Either way, it can be overridden by `--spring.profiles.active` value passed in the commandline or `-Dspring.profiles.active` set in `JAVA_OPTS`
        active: #spring.profiles.active#
    jackson:
        serialization.write_dates_as_timestamps: false

application-dev.yml

spring:
    profiles:
        active: dev
        include: swagger
    devtools:
        restart:
            enabled: true
        livereload:
            enabled: false # we use gulp + BrowserSync for livereload
    jackson:
        serialization.indent_output: true
    datasource:
        type: com.zaxxer.hikari.HikariDataSource
        url: jdbc:h2:file:./target/h2db/db/horacerta;DB_CLOSE_DELAY=-1
        name:
        username: horacerta
        password:

application-prod.yml

spring:
    devtools:
        restart:
            enabled: false
        livereload:
            enabled: false
    datasource:
        type: com.zaxxer.hikari.HikariDataSource
        url: jdbc:postgresql://localhost:5432/horacerta
        name:
        username: horacerta
        password: