File delle proprietà della molla Fuori dal vaso

1. Panoramica

I file delle proprietà sono un metodo comune che possiamo utilizzare per memorizzare informazioni specifiche del progetto. Idealmente, dovremmo tenerlo esterno alla confezione per poter apportare modifiche alla configurazione come e quando richiesto.

In questo rapido tutorial, esamineremo vari modi per caricare il file delle proprietà da una posizione al di fuori del jar in un'applicazione Spring Boot.

2. Utilizzo della posizione predefinita

Per convenzione, Spring Boot cerca un file di configurazione esternalizzato - applicazione. properties o application.yml - in 4 posizioni predeterminate nel seguente ordine di precedenza:

  • Una sottodirectory / config della directory corrente
  • La directory corrente
  • Un pacchetto classpath / config
  • La radice del percorso di classe

Pertanto, verrà caricata una proprietà definita in application.properties e collocata nella sottodirectory / config della directory corrente . Ciò sovrascriverà anche le proprietà in altre posizioni in caso di collisione.

3. Utilizzando la riga di comando

Se la convenzione di cui sopra non funziona per noi, possiamo anche configurare la posizione direttamente nella riga di comando:

java -jar app.jar --spring.config.location=file:///Users/home/config/jdbc.properties

Possiamo anche passare una posizione della cartella in cui l'applicazione cercherà il file:

java -jar app.jar --spring.config.name=application,jdbc --spring.config.location=file:///Users/home/config

E un approccio alternativo consiste nell'eseguire l'applicazione Spring Boot tramite il plug-in Maven. Lì, possiamo usare un parametro -D :

mvn spring-boot:run -Dspring.config.location="file:///Users/home/jdbc.properties"

4. Utilizzo delle variabili d'ambiente

Oppure, diciamo che non possiamo modificare il comando di avvio. La cosa fantastica è che Spring Boot leggerà anche le variabili d'ambiente SPRING_CONFIG_NAME e SPRING_CONFIG_LOCATION :

export SPRING_CONFIG_NAME=application,jdbc export SPRING_CONFIG_LOCATION=file:///Users/home/config java -jar app.jar

Notare che il file predefinito verrà comunque caricato. Ma in caso di collisione di proprietà, il file di proprietà specifico dell'ambiente ha la precedenza.

5. A livello di codice

Oppure, se vogliamo un accesso programmatico, possiamo registrare un bean PropertySourcesPlaceholderConfigurer :

public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { PropertySourcesPlaceholderConfigurer properties = new PropertySourcesPlaceholderConfigurer(); properties.setLocation(new FileSystemResource("/Users/home/conf.properties")); properties.setIgnoreResourceNotFound(false); return properties; }

In questo caso, abbiamo utilizzato PropertySourcesPlaceholderConfigurer per caricare le proprietà da una posizione personalizzata.

6. Esclusione di un file da Fat Jar

Il plug-in Maven Boot includerà automaticamente tutti i file nella directory src / main / resources nel pacchetto jar.

Se non vogliamo che un file faccia parte del jar, possiamo una semplice configurazione per escluderlo:

   src/main/resources true  **/conf.properties    

In questo esempio, abbiamo filtrato il file conf.properties dall'inclusione nel jar risultante.

7. Conclusione

Come possiamo vedere, il framework Spring Boot stesso si occupa della configurazione esternalizzata per noi.

Spesso, dobbiamo solo posizionare i valori delle proprietà nei file e nelle posizioni corretti, ma possiamo anche utilizzare l'API Java di Spring per un maggiore controllo.

Come sempre, il codice sorgente completo degli esempi è disponibile su GitHub.