Iniezione di informazioni Git in primavera

1. Panoramica

In questo tutorial, mostreremo come inserire le informazioni del repository Git in un'applicazione basata su Spring Boot creata da Maven.

Per fare ciò useremo maven-git-commit-id-plugin, uno strumento utile creato esclusivamente per questo scopo.

2. Dipendenze di Maven

Aggiungiamo un plugin a un file sezione del nostro file pom.xml del nostro progetto:

 pl.project13.maven git-commit-id-plugin 2.2.1 

Puoi trovare l'ultima versione qui. Tieni presente che questo p lugin richiede almeno la versione 3.1.1 di Maven.

3. Configurazione

Il plugin ha molti flag e attributi convenienti che ne espandono le funzionalità. In questa sezione descriveremo brevemente alcuni di essi. Se vuoi conoscerli tutti, visita la pagina di maven-git-commit-id-plugin e se vuoi andare direttamente all'esempio, vai alla sezione 4 .

I seguenti frammenti contengono esempi di attributi di plugin; specificali in asezione secondo le vostre esigenze.

3.1. Repository mancante

Puoi configurarlo per omettere gli errori se il repository Git non è stato trovato:

false

3.2. Posizione del repository Git

Se desideri specificare la posizione del repository .git personalizzata , utilizza l' attributo dotGitDirectory :

${project.basedir}/submodule_directory/.git

3.3. File di uscita

Per generare il file delle proprietà con un nome e / o una directory personalizzati, utilizzare la sezione seguente:

 ${project.build.outputDirectory}/filename.properties 

3.4. Verbosità

Per un utilizzo più generoso della registrazione:

true

3.5. Generazione del file delle proprietà

Puoi disattivare la creazione di un file git.properties :

false

3.6. Prefisso delle proprietà

Se desideri specificare un prefisso di proprietà personalizzata, utilizza:

git

3.7. Solo per repository genitore

Quando si lavora con un progetto con sottomoduli, l'impostazione di questo flag assicura che il plugin funzioni solo per il repository principale:

true

3.8. Esclusione di proprietà

Potresti voler escludere alcuni dati sensibili come le informazioni utente del repository:

 git.user.* 

3.9. Proprietà inclusione

È anche possibile includere solo i dati specificati:

 git.commit.id 

4. Applicazione di esempio

Creiamo un controller REST di esempio, che restituirà informazioni di base sul nostro progetto.

Creeremo l'app di esempio usando Spring Boot. Se non sai come configurare un'applicazione Spring Boot, consulta l'articolo introduttivo: Configurare un'applicazione Web Spring Boot.

Our app will consist of 2 classes: Application and CommitIdController

4.1. Application

CommitIdApplication will serve as a root of our application:

@SpringBootApplication(scanBasePackages = { "com.baeldung.git" }) public class CommitIdApplication { public static void main(String[] args) { SpringApplication.run(CommitIdApplication.class, args); } @Bean public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() { PropertySourcesPlaceholderConfigurer propsConfig = new PropertySourcesPlaceholderConfigurer(); propsConfig.setLocation(new ClassPathResource("git.properties")); propsConfig.setIgnoreResourceNotFound(true); propsConfig.setIgnoreUnresolvablePlaceholders(true); return propsConfig; } }

Besides configuring the root of our application, we created PropertyPlaceHolderConfigurer bean so that we are able to access properties file generated by the plugin.

We also set some flags, so that application would run smoothly even if Spring could not resolve the git.properties file.

4.2. Controller

@RestController public class CommitInfoController { @Value("${git.commit.message.short}") private String commitMessage; @Value("${git.branch}") private String branch; @Value("${git.commit.id}") private String commitId; @RequestMapping("/commitId") public Map getCommitId() { Map result = new HashMap(); result.put("Commit message",commitMessage); result.put("Commit branch", branch); result.put("Commit id", commitId); return result; } }

As you can see we are injecting Git properties into class fields.

To see all properties available refer to git.properties file or author's Github page. We also created a simple endpoint which, on HTTP GET request, will respond with a JSON containing injected values.

4.3. Maven Entry

We'll first set up the execution steps to be carried out by the plugin, plus any other configuration property that we consider useful:

 pl.project13.maven git-commit-id-plugin 2.2.1   get-the-git-infos  revision    validate-the-git-infos  validateRevision       

In order for our code to work properly, we need to end up with a git.properties file in our classpath. To achieve this, we have two options.

The first one is to leave it up to the plugin to generate the file. We can specify this by setting the generateGitPropertiesFile configuration property a true value:

 true 

The second option is to include a git.properties file in the resources folder ourselves. We can include only the entries that we'll use in our project:

# git.properties git.tags=${git.tags} git.branch=${git.branch} git.dirty=${git.dirty} git.remote.origin.url=${git.remote.origin.url} git.commit.id=${git.commit.id} git.commit.id.abbrev=${git.commit.id.abbrev} git.commit.id.describe=${git.commit.id.describe} git.commit.id.describe-short=${git.commit.id.describe-short} git.commit.user.name=${git.commit.user.name} git.commit.user.email=${git.commit.user.email} git.commit.message.full=${git.commit.message.full} git.commit.message.short=${git.commit.message.short} git.commit.time=${git.commit.time} git.closest.tag.name=${git.closest.tag.name} git.closest.tag.commit.count=${git.closest.tag.commit.count} git.build.user.name=${git.build.user.name} git.build.user.email=${git.build.user.email} git.build.time=${git.build.time} git.build.host=${git.build.host} git.build.version=${git.build.version}

Maven will replace the placeholders with the appropriate values.

Note: Some IDEs don't work well with this plugin, and might throw a ‘circular placeholder reference' error on bootstrap when we define the properties as we did above.

After booting and requesting localhost:8080/commitId you can see a JSON file with a structure similar to the following:

{ "Commit id":"7adb64f1800f8a84c35fef9e5d15c10ab8ecffa6", "Commit branch":"commit_id_plugin", "Commit message":"Merge branch 'master' into commit_id_plugin" }

5. Integration With Spring Boot Actuator

You can use the plugin with Spring Actuator easily.

Come puoi leggere nella documentazione, GitInfoContributor selezionerà il file git.properties se disponibile. Quindi, con la configurazione predefinita del plugin, le informazioni Git verranno restituite quando si chiama / info endpoint:

{ "git": { "branch": "commit_id_plugin", "commit": { "id": "7adb64f", "time": "2016-08-17T19:30:34+0200" } } }

6. Conclusione

In questo tutorial abbiamo mostrato le basi dell'utilizzo di maven-git-commit-id-plugin e creato una semplice applicazione Spring Boot, che utilizza le proprietà generate dal plugin.

La configurazione presentata non copre tutti i flag e gli attributi disponibili, ma copre tutte le basi necessarie per iniziare a lavorare con questo plugin.

Puoi trovare esempi di codice su Github.