Spring Boot: configurazione di una classe principale

1. Panoramica

Questo breve tutorial fornisce diversi modi per definire un punto di ingresso in un'applicazione Spring Boot tramite Maven e Gradle.

La classe principale di un'applicazione Spring Boot è una classe che contiene un metodo void main () statico pubblico che avvia Spring ApplicationContext . Per impostazione predefinita, se la classe principale non è specificata esplicitamente, Spring ne cercherà una nel classpath in fase di compilazione e non si avvierà se nessuna o più di esse vengono trovate.

A differenza delle applicazioni Java convenzionali, la classe principale discussa in questa esercitazione non appare come proprietà dei metadati della classe principale in META-INF / MANIFEST.MF del file JAR o WAR risultante.

Spring Boot prevede che la proprietà dei metadati della classe principale dell'artefatto sia impostata su org.springframework.boot.loader.JarLauncher(o WarLauncher )il che significa che passare la nostra classe principale direttamente alla riga di comando java non avvierà correttamente la nostra applicazione Spring Boot.

Un manifest di esempio è simile a questo:

Manifest-Version: 1.0 Start-Class: com.baeldung.DemoApplication Main-Class: org.springframework.boot.loader.JarLauncher

Invece, dobbiamo definire la proprietà Start-Class nel manifest che viene valutata da JarLauncher per avviare l'applicazione.

Vediamo come possiamo controllare questa proprietà usando Maven e Gradle.

2. Maven

La classe principale può essere definita come un elemento della classe iniziale nella sezione delle proprietà di pom.xml :

  com.baeldung.DemoApplication  

Nota che questa proprietà verrà valutata solo se aggiungiamo anche spring-boot-starter-parent comenel nostro pom.xml .

In alternativa, la classe principale può essere definita come l' elemento mainClass del plugin spring-boot-maven nella sezione plugin del nostro pom.xml :

   org.springframework.boot spring-boot-maven-plugin  com.baeldung.DemoApplication    

Un esempio di questa configurazione di Maven può essere trovato su GitHub.

3. Gradle

Se stiamo usando il plugin Spring Boot Gradle , ci sono alcune configurazioni ereditate da org.springframework.boot in cui potremmo specificare la nostra classe principale.

Nel file Gradle del progetto, mainClassName può essere definito all'interno del blocco di configurazione springBoot . Questa modifica apportata qui viene rilevata da bootRun e bootJar task:

springBoot { mainClassName = 'cpm.baeldung.DemoApplication' }

In alternativa, la classe principale può essere definita come la mainClassName proprietà di bootJar compito Gradle:

bootJar { mainClassName = 'cpm.baeldung.DemoApplication' }

O come attributo manifest dell'attività bootJar :

bootJar { manifest { attributes 'Start-Class': 'com.baeldung.DemoApplication' } }

Notare che la classe principale specificata nel blocco di configurazione bootJar influisce solo sul JAR prodotto dall'attività stessa. La modifica non influisce sul comportamento di altre attività Spring Boot Gradle come bootRun .

Come bonus, se il plug-in dell'applicazione Gradle viene applicato al progetto, mainClassName può essere definito come una proprietà globale:

mainClassName = 'com.baeldung.DemoApplication' 

Possiamo trovare un esempio di queste configurazioni Gradle su GitHub.

4. Utilizzo della CLI

Possiamo anche specificare una classe principale tramite l'interfaccia della riga di comando.

Org.springframework.boot.loader.PropertiesLauncher di Spring Boot viene fornito con un argomento JVM per consentire di sovrascrivere la classe principale logica chiamata loader.main :

java -cp bootApp.jar -Dloader.main=com.baeldung.DemoApplication org.springframework.boot.loader.PropertiesLauncher

5. conclusione

Esistono diversi modi per specificare il punto di ingresso a un'applicazione Spring Boot. È importante sapere che tutte queste configurazioni sono solo modi diversi per modificare il manifest di un file JAR o WAR.

Esempi di codice funzionanti possono essere trovati qui e qui.