In Spring Boot, un profilo è un insieme di configurazioni specifiche che possono essere attivate o disattivate a seconda dell'ambiente in cui l'applicazione viene eseguita. Utilizzare i profili permette di gestire facilmente diverse configurazioni, come quelle relative al database, ai servizi esterni, o alle proprietà di sistema.
Utilizzare i profili con le proprietà
I profili in Spring Boot vengono gestiti principalmente tramite il file application.properties
o application.yml
. Quando un'applicazione viene avviata, Spring Boot carica le proprietà configurate per il profilo attivo. I profili possono essere definiti tramite la proprietà spring.profiles.active
, che permette di selezionare quale set di configurazioni deve essere utilizzato.
Esempio di configurazione del database tramite application.properties
Supponiamo di avere due profili: uno per l'ambiente di sviluppo (dev
) e uno per l'ambiente di produzione (prod
). Ogni profilo conterrà la configurazione di connessione al database, ma le configurazioni saranno diverse tra di loro.
File application.properties
per il profilo di sviluppo
Nel file application-dev.properties
possiamo configurare un database H2, che è ideale per lo sviluppo locale:
# application-dev.properties
# Configurazione per il database H2 in sviluppo
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
File application.properties
per il profilo di produzione
Nel file application-prod.properties
, invece, configuriamo un database MySQL per l'ambiente di produzione:
# application-prod.properties
# Configurazione per il database MySQL in produzione
spring.datasource.url=jdbc:mysql://localhost:3306/prod_db
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.username=prod_user
spring.datasource.password=prod_password
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
Come selezionare il profilo attivo?
Il profilo attivo può essere selezionato in vari modi. Una delle modalità più comuni è tramite il file application.properties
principale, dove si imposta la proprietà spring.profiles.active
:
# Selezioniamo il profilo attivo
spring.profiles.active=dev
In alternativa, è possibile passare il profilo tramite l'argomento della riga di comando durante l'avvio dell'applicazione:
java -jar myapp.jar --spring.profiles.active=prod
Utilizzare i profili per configurare servizi esterni
I profili possono essere utilizzati anche per configurare variabili e credenziali per servizi esterni. Ad esempio, supponiamo di avere un servizio di invio email che deve utilizzare credenziali diverse a seconda dell'ambiente.
File application-dev.properties
per il profilo di sviluppo
# application-dev.properties
# Configurazione per il servizio email in sviluppo
mail.smtp.host=smtp.dev.example.com
mail.smtp.port=587
mail.smtp.username=testuser
mail.smtp.password=testpassword
File application-prod.properties
per il profilo di produzione
# application-prod.properties
# Configurazione per il servizio email in produzione
mail.smtp.host=smtp.prod.example.com
mail.smtp.port=465
mail.smtp.username=produser
mail.smtp.password=prodpassword
Come gestire più profili e configurazioni?
Possiamo utilizzare più profili in un unico progetto per gestire la configurazione di vari ambienti, ad esempio:
- dev: per lo sviluppo con configurazioni semplificate e mock di servizi esterni.
- test: per il testing con un database di test e altre configurazioni di test.
- prod: per la produzione con tutte le configurazioni ottimizzate per la performance e la sicurezza.
Quando avviamo l'applicazione con un profilo specifico, Spring Boot carica automaticamente solo le configurazioni associate a quel profilo.
Conclusione
La gestione degli environment in Spring Boot tramite i profili è una tecnica potente e flessibile. Permette di separare la configurazione per ogni ambiente (sviluppo, test, produzione) senza dover modificare il codice dell'applicazione. Utilizzando i profili e la proprietà spring.profiles.active
, è possibile personalizzare facilmente le configurazioni per ogni ambiente, inclusi i dettagli di connessione ai database, le credenziali per i servizi esterni e altre variabili di sistema.