Spring Boot: Конфигуриране на основен клас

1. Общ преглед

Този бърз урок предоставя различни начини за определяне на входна точка в приложението Spring Boot чрез Maven и Gradle.

Основният клас на приложението Spring Boot е клас, който съдържа публичен статичен метод void main () , който стартира Spring ApplicationContext . По подразбиране, ако основният клас не е изрично посочен, Spring ще потърси такъв в пътя на класа по време на компилиране и няма да стартира, ако не бъде открит нито един, нито няколко от тях.

За разлика от конвенционалните приложения на Java, основният клас, обсъждан в този урок, не се появява като свойство на метаданните Main-Class в META-INF / MANIFEST.MF на получения JAR или WAR файл.

Spring Boot очаква свойството на метаданните на основния клас на артефакта да бъде зададено на org.springframework.boot.loader.JarLauncher(или WarLauncher )което означава, че предаването на нашия основен клас директно в командния ред на java няма да стартира правилно приложението ни Spring Boot.

Примерен манифест изглежда така:

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

Вместо това трябва да дефинираме свойството Start-Class в манифеста, което се оценява от JarLauncher, за да стартира приложението.

Нека да видим как можем да контролираме това свойство с помощта на Maven и Gradle.

2. Мейвън

Основният клас може да бъде дефиниран като елемент от начален клас в раздела за свойства на pom.xml :

  com.baeldung.DemoApplication  

Имайте предвид, че това свойство ще бъде оценено само ако добавим и spring-boot-starter-parent катов нашия pom.xml .

Като алтернатива, основният клас може да бъде дефиниран като елемент mainClass на приставката spring-boot-maven-plugin в раздела за приставки на нашия pom.xml :

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

Пример за тази конфигурация на Maven можете да намерите в GitHub.

3. Градле

Ако използваме приставката Spring Boot Gradle , има няколко конфигурации, наследени от org.springframework.boot, където можем да посочим основния си клас.

Във файла Gradle на проекта mainClassName може да бъде дефиниран в конфигурационния блок springBoot . Тази промяна, направена тук, се взима от задачите bootRun и bootJar :

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

Алтернативно, основният клас може да се дефинира като mainClassName собственост на bootJar Gradle задача:

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

Или като манифестен атрибут на задачата bootJar :

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

Обърнете внимание, че основният клас, посочен в конфигурационния блок bootJar, засяга само JAR, който самата задача създава. Промяната не засяга поведението на други задачи на Spring Boot Gradle като bootRun .

Като бонус, ако приставката за приложение Gradle е приложена към проекта, mainClassName може да бъде дефинирана като глобално свойство:

mainClassName = 'com.baeldung.DemoApplication' 

Можем да намерим пример за тези конфигурации на Gradle в GitHub.

4. Използване на CLI

Можем да посочим и основен клас чрез интерфейса на командния ред.

Org.springframework.boot.loader.PropertiesLauncher на Spring Boot идва с JVM аргумент, който ви позволява да замените логическия основен клас, наречен loader.main :

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

5. Заключение

Има повече от няколко начина за определяне на точката за влизане в приложението Spring Boot. Важно е да знаете, че всички тези конфигурации са просто различни начини за модифициране на манифеста на JAR или WAR файл.

Примери за работещ код можете да намерите тук и тук.