Spring Boot: een hoofdklasse configureren

1. Overzicht

Deze korte tutorial biedt verschillende manieren om een ​​toegangspunt tot een Spring Boot-applicatie te definiëren via Maven en Gradle.

De hoofdklasse van een Spring Boot-toepassing is een klasse die een public static void main () methode die de lente start ApplicationContext. Als de hoofdklasse niet expliciet is gespecificeerd, zal Spring er standaard naar zoeken in het klassenpad tijdens het compileren en zal niet starten als er geen of meerdere worden gevonden.

In tegenstelling tot conventionele Java-toepassingen, wordt de hoofdklasse die in deze zelfstudie wordt besproken, niet weergegeven als de Hoofdklasse metadata-eigenschap in META-INF / MANIFEST.MF van het resulterende JAR- of WAR-bestand.

Spring Boot verwacht het artefact Hoofdklasse metadata-eigenschap die moet worden ingesteld op org.springframework.boot.loader.JarLauncher(of WarLauncher)wat betekent dat het direct doorgeven van onze hoofdklasse aan de Java-opdrachtregel onze Spring Boot-applicatie niet correct start.

Een voorbeeldmanifest ziet er als volgt uit:

Manifest-versie: 1.0 Startklasse: com.baeldung.DemoApplication Hoofdklasse: org.springframework.boot.loader.JarLauncher

In plaats daarvan moeten we de Begin de les eigenschap in het manifest dat wordt geëvalueerd door JarLauncher om de applicatie te starten.

Laten we eens kijken hoe we deze eigenschap kunnen besturen met Maven en Gradle.

2. Maven

De hoofdklasse kan worden gedefinieerd als een startklas element in het pom.xmlSectie met eigenschappen:

  com.baeldung.DemoApplication 

Let daar op deze eigenschap wordt alleen geëvalueerd als we ook de spring-boot-starter-parent toevoegen net zo in onze pom.xml.

Alternatief, de hoofdklasse kan worden gedefinieerd als de mainClass element van de spring-boot-maven-plugin in het plugin-gedeelte van onze pom.xml:

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

Een voorbeeld van deze Maven-configuratie is te vinden op GitHub.

3. Grijpen

Als we de Spring Boot Gradle-plug-in, zijn er een paar configuraties overgenomen van org.springframework.boot waar we onze hoofdklasse konden specificeren.

In het Gradle-bestand van het project, mainClassName kan worden gedefinieerd binnen springBoot configuratieblok. Deze wijziging die hier wordt aangebracht, wordt opgepikt door bootRun en bootJar taak:

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

Als alternatief kan de hoofdklasse worden gedefinieerd als de mainClassName eigendom van bootJar Gradle-taak:

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

Of als een duidelijk kenmerk van de bootJar taak:

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

Merk op dat de hoofdklasse die is opgegeven in het bootJar configuratieblok heeft alleen invloed op de JAR die de taak zelf produceert. De wijziging heeft geen invloed op het gedrag van andere Spring Boot Gradle-taken zoals bootRun.

Als een bonus, als het Gradle-applicatie-plug-in wordt toegepast op het project, mainClassName kan worden gedefinieerd als een globale eigenschap:

mainClassName = 'com.baeldung.DemoApplication' 

We kunnen een voorbeeld van deze Gradle-configuraties vinden op GitHub.

4. CLI gebruiken

We kunnen ook een hoofdklasse specificeren via de opdrachtregelinterface.

Spring Boot's org.springframework.boot.loader.PropertiesLauncher wordt geleverd met een JVM-argument waarmee u de logische hoofdklasse met de naam kunt overschrijven loader.main:

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

5. Conclusie

Er zijn meer dan een paar manieren om het toegangspunt voor een Spring Boot-toepassing op te geven. Het is belangrijk om te weten dat al deze configuraties slechts verschillende manieren zijn om het manifest van een JAR- of WAR-bestand te wijzigen.

Voorbeelden van werkcodes zijn hier en hier te vinden.