Aggiungi proprietà di compilazione a un'applicazione Spring Boot

1. Introduzione

Di solito, la configurazione della build del nostro progetto contiene molte informazioni sulla nostra applicazione. Alcune di queste informazioni potrebbero essere necessarie nell'applicazione stessa. Quindi, invece di codificare queste informazioni, possiamo usarle dalla configurazione di build esistente.

In questo articolo, vedremo come utilizzare le informazioni dalla configurazione di build del progetto in un'applicazione Spring Boot.

2. Le informazioni sulla build

Supponiamo di voler visualizzare la descrizione e la versione dell'applicazione nella home page del nostro sito web.

Di solito, queste informazioni sono presenti in pom.xml :

 4.0.0 spring-boot spring-boot war This is simple boot application for Spring boot actuator test 0.0.1-SNAPSHOT ... 

3. Fare riferimento alle informazioni nel file delle proprietà dell'applicazione

Ora, per utilizzare le informazioni di cui sopra nella nostra applicazione, dovremo prima fare riferimento ad esso in uno dei nostri file delle proprietà dell'applicazione:

[email protected]@ [email protected]@

Qui, abbiamo utilizzato il valore della proprietà build project.description per impostare la proprietà application application-description . Allo stesso modo, la versione dell'applicazione viene impostata utilizzando project.version .

La parte più significativa qui è l'uso del carattere @ attorno al nome della proprietà. Questo dice a Spring di espandere la proprietà denominata dal progetto Maven.

Ora, quando creiamo il nostro progetto, queste proprietà verranno sostituite con i loro valori da pom.xml .

Questa espansione viene anche definita filtro delle risorse. Vale la pena notare che questo tipo di filtro viene applicato solo alla configurazione di produzione . Di conseguenza, non possiamo usare le proprietà di compilazione nei file in src / test / resources .

Un'altra cosa da notare è che se usiamo il flag addResources , l' obiettivo spring-boot: run aggiunge src / main / resources direttamente al classpath. Sebbene sia utile per scopi di ricarica a caldo, aggira il filtro delle risorse e, di conseguenza, anche questa funzione.

Ora, l'espansione della proprietà di cui sopra funziona immediatamente solo se usiamo spring-boot-starter-parent .

3.1. Proprietà in espansione senza molla-boot-starter-genitore

Vediamo come possiamo abilitare questa funzione senza usare la dipendenza spring-boot-starter-parent .

Innanzitutto, dobbiamo abilitare il filtro delle risorse all'interno del file elemento nel nostro pom.xml :

  src/main/resources true  

Qui, abbiamo abilitato il filtro delle risorse solo in src / main / resources .

Quindi, possiamo aggiungere la configurazione del delimitatore per il plugin maven-resources :

 org.apache.maven.plugins maven-resources-plugin   @  false  

Notare che abbiamo specificato la proprietà useDefaultDelimiters come false . Ciò garantisce che i segnaposto Spring standard come $ {placeholder} non vengano espansi dalla build.

4. Utilizzo delle informazioni di compilazione nei file YAML

Se stiamo usando YAML per memorizzare le proprietà dell'applicazione, potremmo non essere in grado di usare @ per specificare le proprietà di compilazione . Questo perché @ è un carattere riservato in YAML.

Ma possiamo ovviare a questo problema configurando un diverso delimitatore in maven-resources-plugin :

 org.apache.maven.plugins maven-resources-plugin   ^  false  

Oppure, semplicemente sovrascrivendo la proprietà resource.delimiter nel blocco delle proprietà del nostro pom.xml :

 ^ 

Quindi, possiamo usare ^ nel nostro file YAML:

application-description: ^project.description^ application-version: ^project.version^

5. conclusione

In questo articolo, abbiamo visto come possiamo utilizzare le informazioni sul progetto Maven nella nostra applicazione. Questo può aiutarci a evitare di codificare le informazioni già presenti nella configurazione della build del progetto nei nostri file delle proprietà dell'applicazione.

E, naturalmente, il codice che accompagna questo tutorial può essere trovato su GitHub.