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