Spring Boot: настройка основного класса

Spring Boot: настройка основного класса

1. обзор

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

Основной класс приложения Spring Boot - это класс, содержащий методpublic static void main(), запускающий 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.

В отличие от обычных приложений Java, основной класс, обсуждаемый в этом руководстве, не отображается как свойство метаданныхMain-Class в META-INF / MANIFEST.MF результирующего файла JAR или WAR.

Spring Boot ожидает, что для свойства метаданных артефактаMain-Class будет установлено значениеorg.springframework.boot.loader.JarLauncher  (илиWarLauncher) w, что означает, что передача нашего основного класса непосредственно в команду java строка не запускает наше приложение Spring Boot правильно.

Пример манифеста выглядит так:

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

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

Давайте посмотрим, как мы можем управлять этим свойством с помощью Maven и Gradle.

2. специалист

Основной класс можно определить как элементa start-class в разделе свойствpom.xml:


      
      org.example.DemoApplication

Обратите внимание, чтоthis property will only be evaluated if we also add the spring-boot-starter-parent как<parent> в нашемpom.xml.

В качестве альтернативыthe main class can be defined as the mainClass element of the spring-boot-maven-plugin в разделе плагинов нашегоpom.xml:


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

Пример этой конфигурации Maven можно найтиover on GitHub.

3. Gradle

Если мы используемSpring Boot Gradle plugin, есть несколько конфигураций, унаследованных отorg.springframework.boot , где мы могли бы указать наш основной класс.

В файле Gradle проектаmainClassName можно определитьwithin springBoot configuration block. Это изменение, сделанное здесь, улавливается задачейbootRun иbootJar:

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

В качестве альтернативы, основной класс можно определить как свойствоmainClassName задачи GradlebootJar:

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

Или как явный атрибут задачиbootJar:

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

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

В качестве бонуса, если к проекту применяетсяGradle application plugin,mainClassName can be defined as a global property:

mainClassName = 'org.example.DemoApplication'

Мы можем найти пример этих конфигураций Gradleover on GitHub.

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

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

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

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

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

Существует несколько способов указать точку входа в приложение Spring Boot. Важно знать, что все эти конфигурации представляют собой просто разные способы изменения манифеста файла JAR или WAR.

Примеры рабочего кода можно найтиhere иhere.