Многие разработчики на Spring Boot хотят, чтобы их приложения использовали автоконфигурацию, сканирование компонентов и могли определять дополнительную конфигурацию в своем "классе приложения". Для активации этих трех функций можно использовать единую аннотацию @SpringBootApplication:

  • @EnableAutoConfiguration: активирует механизм автоконфигурации Spring Boot

  • @ComponentScan: активирует сканирование аннотации @Component для пакета, в котором находится приложение

  • @SpringBootConfiguration: позволяет регистрировать дополнительные бины в контексте или импортировать дополнительные конфигурационные классы. Альтернатива стандартной аннотации @Configuration из Spring, которая помогает обнаруживать конфигурации в ваших интеграционных тестах.

Java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// То же, что и @SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
Kotlin
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
// same as @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
@SpringBootApplication
class MyApplication
fun main(args: Array<String>) {
    runApplication<MyApplication>(*args)
}
@SpringBootApplication также предусматривает псевдонимы для настройки атрибутов аннотаций @EnableAutoConfiguration и @ComponentScan.

Ни одна из этих функций не является обязательной, и вы можете заменять эту единую аннотацию любой из функций, которые она активирует. Например, можно не использовать сканирование компонентов или сканирование конфигурационных свойств в своем приложении:

Java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Import;
@SpringBootConfiguration(proxyBeanMethods = false)
@EnableAutoConfiguration
@Import({ SomeConfiguration.class, AnotherConfiguration.class })
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
Kotlin
import org.springframework.boot.SpringBootConfiguration
import org.springframework.boot.autoconfigure.EnableAutoConfiguration
import org.springframework.boot.docs.using.structuringyourcode.locatingthemainclass.MyApplication
import org.springframework.boot.runApplication
import org.springframework.context.annotation.Import
@SpringBootConfiguration(proxyBeanMethods = false)
@EnableAutoConfiguration
@Import(SomeConfiguration::class, AnotherConfiguration::class)
class MyApplication
fun main(args: Array<String>) {
    runApplication<MyApplication>(*args)
}

В этом примере MyApplication является таким же, как и любое другое приложение Spring Boot, за исключением того, что классы, аннотированные @Component и @ConfigurationProperties, не обнаруживаются автоматически, а пользовательские бины импортируются явно (см. аннотацию @Import).

Выполнение вашего приложения

Одним из самых больших преимуществ упаковки приложения в виде jar-файла и использования встроенного HTTP-сервера является то, что вы можете запускать свое приложение так же, как и любое другое. Этот образец применяется для отладки приложений в Spring Boot. Вам не нужны никакие специальные плагины или расширения для IDE.

В этом разделе описана только упаковка на основе jar-файлов. Если вы решили упаковать свое приложение в виде war-файла, обратитесь к документации для вашего сервера или IDE.

Выполнение из IDE

Вы можете запустить приложение Spring Boot из вашей IDE как Java-приложение. Однако сначала необходимо импортировать проект. Этапы импорта зависят от вашей IDE и системы сборки. Большинство IDE способны импортировать Maven-проекты напрямую. Например, пользователи Eclipse могут выбрать Import…​Existing Maven Projects из меню File.

Если нельзя напрямую импортировать свой проект в IDE, то можно сгенерировать метаданные IDE с помощью плагина сборки. Maven включает в себя плагины для Eclipse и IDEA. Gradle предусматривает плагины для различных IDE.

Если вы случайно запустите веб-приложение дважды, то увидите ошибку "Порт уже используется (Port already in use)". Пользователи Spring Tools могут использовать кнопку Relaunch, а не кнопку Run, чтобы убедиться, что любой существующий экземпляр закрыт.

Выполнение в виде упакованного приложения

Если вы используете плагины Spring Boot для Maven или Gradle, чтобы создать исполняемый jar-файл, то можете запустить свое приложение с помощью команды java -jar, как показано в следующем примере:

$ java -jar target/myapplication-0.0.1-SNAPSHOT.jar

Также можно запустить упакованное приложение с активированной поддержкой удаленной отладки. Это позволяет подключать отладчик к упакованному приложению, как показано в следующем примере:

$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
       -jar target/myapplication-0.0.1-SNAPSHOT.jar

Использование плагина для Maven

Плагин Spring Boot для Maven содержит цель run, которую можно использовать для быстрой компиляции и выполнения приложения. Приложения выполняются в разобранном виде, как и в вашей IDE. В следующем примере показана типичная команда Maven для выполнения приложения Spring Boot:

$ mvn spring-boot:run

Вы также можете использовать переменную окружения операционной системы MAVEN_OPTS, как показано в следующем примере:

$ export MAVEN_OPTS=-Xmx1024m

Использование плагина для Gradle

Плагин Spring Boot Gradle также содержит задачу bootRun, которую можно использовать для запуска приложения в разобранном виде. Задача bootRun добавляется всякий раз, когда вы применяете плагины org.springframework.boot и java, и показана в следующем примере:

$ gradle bootRun

Вы также можете использовать переменную окружения операционной системы JAVA_OPTS, как показано в следующем примере:

$ export JAVA_OPTS=-Xmx1024m

Горячая замена

Поскольку приложения Spring Boot являются обычными Java-приложениями, горячая замена JVM должна работать "из коробки". Горячая замена в JVM несколько ограничена в отношении байт-кода, который она может заменить. В качестве более полного решения можно использовать JRebel.

Модуль spring-boot-devtools также содержит средства поддержки быстрого перезапуска приложений.