Introducció

Els perfils de Spring Boot són una característica poderosa que permet configurar diferents entorns d'execució per a la teva aplicació. Això és especialment útil quan necessites tenir configuracions diferents per a desenvolupament, proves i producció. En aquest tema, aprendrem què són els perfils de Spring Boot, com configurar-los i com utilitzar-los de manera efectiva.

Què són els perfils de Spring Boot?

Els perfils de Spring Boot permeten definir diferents conjunts de configuracions que es poden activar o desactivar segons l'entorn en què s'executi l'aplicació. Això facilita la gestió de configuracions específiques per a diferents entorns, com ara:

  • Desenvolupament: Configuracions que només s'utilitzen durant el desenvolupament.
  • Proves: Configuracions específiques per a l'execució de proves.
  • Producció: Configuracions que s'utilitzen en l'entorn de producció.

Configurant perfils de Spring Boot

  1. Definint perfils en el fitxer application.properties

Spring Boot permet definir configuracions específiques per a cada perfil en fitxers de propietats separats. Per exemple, pots tenir els següents fitxers de propietats:

  • application.properties: Configuració per defecte.
  • application-dev.properties: Configuració per a l'entorn de desenvolupament.
  • application-test.properties: Configuració per a l'entorn de proves.
  • application-prod.properties: Configuració per a l'entorn de producció.

  1. Exemple de configuració

Suposem que tenim una aplicació que necessita configurar una base de dades diferent per a cada entorn. Podem definir les configuracions de la següent manera:

application.properties

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=password

application-dev.properties

spring.datasource.url=jdbc:mysql://localhost:3306/devdb
spring.datasource.username=devuser
spring.datasource.password=devpassword

application-test.properties

spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=testuser
spring.datasource.password=testpassword

application-prod.properties

spring.datasource.url=jdbc:mysql://localhost:3306/proddb
spring.datasource.username=produser
spring.datasource.password=prodpassword

  1. Activant perfils

Pots activar un perfil específic de diverses maneres:

A. Utilitzant la línia de comandes

Quan inicies l'aplicació des de la línia de comandes, pots especificar el perfil a utilitzar amb l'opció --spring.profiles.active. Per exemple:

java -jar myapp.jar --spring.profiles.active=dev

B. Utilitzant variables d'entorn

També pots definir el perfil actiu utilitzant una variable d'entorn:

export SPRING_PROFILES_ACTIVE=dev

C. Utilitzant el fitxer application.properties

Pots definir el perfil actiu directament en el fitxer application.properties:

spring.profiles.active=dev

Exemple pràctic

A continuació, es mostra un exemple pràctic d'una aplicació Spring Boot que utilitza perfils per configurar diferents bases de dades segons l'entorn.

  1. Creant l'estructura del projecte

Crea un projecte Spring Boot amb la següent estructura:

src/
├── main/
│   ├── java/
│   │   └── com/
│   │       └── example/
│   │           └── demo/
│   │               ├── DemoApplication.java
│   │               └── controller/
│   │                   └── HelloController.java
│   └── resources/
│       ├── application.properties
│       ├── application-dev.properties
│       ├── application-test.properties
│       └── application-prod.properties

  1. Implementant el controlador

DemoApplication.java

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

HelloController.java

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @Value("${spring.datasource.url}")
    private String datasourceUrl;

    @GetMapping("/hello")
    public String hello() {
        return "Datasource URL: " + datasourceUrl;
    }
}

  1. Configurant els fitxers de propietats

application.properties

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=password

application-dev.properties

spring.datasource.url=jdbc:mysql://localhost:3306/devdb
spring.datasource.username=devuser
spring.datasource.password=devpassword

application-test.properties

spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=testuser
spring.datasource.password=testpassword

application-prod.properties

spring.datasource.url=jdbc:mysql://localhost:3306/proddb
spring.datasource.username=produser
spring.datasource.password=prodpassword

  1. Executant l'aplicació amb diferents perfils

Per executar l'aplicació amb el perfil de desenvolupament, utilitza la línia de comandes:

mvn spring-boot:run -Dspring-boot.run.profiles=dev

Exercici pràctic

Exercici

  1. Crea un nou perfil anomenat staging amb les següents configuracions:

    • URL de la base de dades: jdbc:mysql://localhost:3306/stagingdb
    • Nom d'usuari: staginguser
    • Contrasenya: stagingpassword
  2. Modifica el controlador HelloController per retornar també el nom d'usuari de la base de dades.

  3. Executa l'aplicació amb el perfil staging i verifica que les configuracions es carreguen correctament.

Solució

application-staging.properties

spring.datasource.url=jdbc:mysql://localhost:3306/stagingdb
spring.datasource.username=staginguser
spring.datasource.password=stagingpassword

HelloController.java

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @Value("${spring.datasource.url}")
    private String datasourceUrl;

    @Value("${spring.datasource.username}")
    private String datasourceUsername;

    @GetMapping("/hello")
    public String hello() {
        return "Datasource URL: " + datasourceUrl + ", Username: " + datasourceUsername;
    }
}

Per executar l'aplicació amb el perfil staging, utilitza la línia de comandes:

mvn spring-boot:run -Dspring-boot.run.profiles=staging

Conclusió

Els perfils de Spring Boot són una eina essencial per gestionar configuracions específiques per a diferents entorns. Amb aquesta funcionalitat, pots assegurar-te que la teva aplicació s'executi correctament en qualsevol entorn, des de desenvolupament fins a producció. Practica amb els exercicis proporcionats per familiaritzar-te amb l'ús de perfils i millorar la teva capacitat per gestionar configuracions en aplicacions Spring Boot.

Curs de Spring Boot

Mòdul 1: Introducció a Spring Boot

Mòdul 2: Conceptes bàsics de Spring Boot

Mòdul 3: Construint serveis web RESTful

Mòdul 4: Accés a dades amb Spring Boot

Mòdul 5: Seguretat a Spring Boot

Mòdul 6: Proves a Spring Boot

Mòdul 7: Funcions avançades de Spring Boot

Mòdul 8: Desplegant aplicacions Spring Boot

Mòdul 9: Rendiment i monitorització

Mòdul 10: Millors pràctiques i consells

© Copyright 2024. Tots els drets reservats