Spring Boot: Configuration d’une classe principale

Spring Boot: Configuration d'une classe principale

1. Vue d'ensemble

Ce didacticiel rapide propose différentes manières de définir un point d’entrée dans une application Spring Boot via Maven et Gradle.

La classe principale d'une application Spring Boot est une classe qui contient une méthodepublic static void main() qui démarre les SpringApplicationContext. By default, if the main class isn’t explicitly specified, Spring will search for one in the classpath at compile time and fail to start if none or multiple of them are found.

Contrairement aux applications Java conventionnelles, la classe principale décrite dans ce didacticiel n'apparaît pas en tant que propriété de métadonnéesMain-Class dans META-INF / MANIFEST.MF du fichier JAR ou WAR résultant.

Spring Boot s'attend à ce que la propriété de métadonnéesMain-Class de l'artefact soit définie surorg.springframework.boot.loader.JarLauncher  (ouWarLauncher) , ce qui signifie que passer notre classe principale directement à la commande java ne démarre pas correctement notre application Spring Boot.

Un exemple de manifeste ressemble à ceci:

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

Au lieu de cela, nous devons définir la propriétéStart-Class dans le manifeste qui est évaluée parJarLauncher pour démarrer l'application.

Voyons comment nous pouvons contrôler cette propriété à l'aide de Maven et Gradle.

2. Maven

La classe principale peut être définie comme l'élémenta start-class dans la section des propriétés depom.xml:


      
      org.example.DemoApplication

Notez quethis property will only be evaluated if we also add the spring-boot-starter-parent comme<parent> dans nospom.xml.

Alternativement,the main class can be defined as the mainClass element of the spring-boot-maven-plugin dans la section plugin de nospom.xml:


    
        
            org.springframework.boot
            spring-boot-maven-plugin
            
                org.example.DemoApplication
            
        
    

Un exemple de cette configuration Maven peut être trouvéover on GitHub.

3. Gradle

Si nous utilisons lesSpring Boot Gradle plugin, il existe quelques configurations héritées deorg.springframework.boot w où nous pourrions spécifier notre classe principale.

Dans le fichier Gradle du projet,mainClassName peut être définiwithin springBoot configuration block. Ce changement effectué ici est repris par la tâchebootRun etbootJar:

springBoot {
    mainClassName = 'org.example.DemoApplication'
}

Alternativement, la classe principale peut être définie comme la propriétémainClassName de la tâche Gradle debootJar:

bootJar {
    mainClassName = 'org.example.DemoApplication'
}

Ou comme attribut manifeste de la tâchebootJar:

bootJar {
    manifest {
    attributes 'Start-Class': 'org.example.DemoApplication'
    }
}

Notez que la classe principale spécifiée dans le bloc de configurationbootJar affecte uniquement le JAR que la tâche elle-même produit. Le changement n'affecte pas le comportement des autres tâches Spring Boot Gradle telles quebootRun.

En prime, si leGradle application plugin est appliqué au projet,mainClassName can be defined as a global property:

mainClassName = 'org.example.DemoApplication'

On peut trouver un exemple de ces configurations Gradleover on GitHub.

4. Utilisation de la CLI

Nous pouvons également spécifier une classe principale via l'interface de ligne de commande.

Lesorg.springframework.boot.loader.PropertiesLauncher de Spring Boot sont fournis avec un argument JVM pour vous permettre de remplacer la classe principale logique appeléeloader.main:

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

5. Conclusion

Il existe plusieurs façons de spécifier le point d'entrée dans une application Spring Boot. Il est important de savoir que toutes ces configurations ne sont que des moyens différents de modifier le manifeste d’un fichier JAR ou WAR.

Des exemples de code de travail peuvent être trouvéshere ethere.