DEV Community

Hunor Vadasz-Perhat
Hunor Vadasz-Perhat

Posted on

spring-010: spring-boot-bootstrapping-behind-the-scenes

When you start a Spring Boot application, a series of steps happen behind the scenes to bootstrap and initialize the application. Here's a breakdown of the logical execution order with a step-by-step explanation.


1. Steps in Spring Boot Application Startup

1.1 Bootstrap the JVM and Load Main Class

  • The Java Virtual Machine (JVM) starts and loads the main class containing the public static void main(String[] args) method.

1.2 Run the SpringApplication.run() method

  • The SpringApplication.run() method is executed, which starts the Spring Boot application.
  • This is the entry point for all Spring Boot applications.

1.3 Initialize SpringApplication

  • SpringApplication is initialized by performing several setup steps, including:
    • Determining whether the application is a web or non-web application.
    • Loading application configuration and environment properties.
    • Preparing the application context.

1.4 Prepare the ApplicationContext

  • The Spring Application Context is created, which acts as a container to manage beans, configurations, and dependencies.
  • If it's a web application, a Servlet-based context (like AnnotationConfigServletWebServerApplicationContext) is used.

1.5 Load ApplicationContextInitializers

  • Any registered ApplicationContextInitializer beans (which modify the context before it starts) are loaded.

1.6 Detect and Apply SpringApplicationRunListeners

  • Spring scans and loads any SpringApplicationRunListener implementations that allow external listeners to be notified about application startup events.

1.7 Prepare the Environment (Properties, Profiles, and Configurations)

  • The environment variables, application.properties or application.yml, and command-line arguments are loaded.
  • Active and default profiles are determined.

1.8 Refresh the Application Context

  • The Application Context is fully refreshed, which includes:
    • Scanning for @Component, @Service, @Repository, and @Controller annotated classes.
    • Instantiating beans and managing their lifecycle.
    • Applying dependency injection and resolving dependencies.

1.9 Start Embedded Web Server (if applicable)

  • If the application is a web application, Spring Boot automatically starts an embedded web server (Tomcat, Jetty, or Undertow).
  • The web server listens for incoming requests on a specified port.

1.10 Execute CommandLineRunner and ApplicationRunner Beans

  • If any beans implementing CommandLineRunner or ApplicationRunner are present, they are executed.
  • These are useful for running initialization logic after the application has started.

1.11 Trigger Application Ready Events

  • The ApplicationReadyEvent is triggered, signaling that the application is fully started and ready to handle requests.

1.12 Keep Application Running (for Web Apps)

  • For web applications, the application keeps running, waiting for incoming HTTP requests.
  • For non-web applications, it will exit after running initialization logic.

2. Logical Execution Order: Simple Overview

To remember the startup flow, think of it as three major phases:

1️⃣ Bootstrapping Phase

  • JVM starts the application.
  • SpringApplication.run() is executed.
  • Environment and configuration are prepared.

2️⃣ Context Initialization Phase

  • Application Context is created and refreshed.
  • Beans are scanned, created, and injected.
  • If a web app, the embedded server starts.

3️⃣ Post-Startup Phase

  • CommandLineRunner and ApplicationRunner execute.
  • Application is now fully running and waiting for requests. 🚀

AWS Q Developer image

Your AI Code Assistant

Ask anything about your entire project, code and get answers and even architecture diagrams. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Start free in your IDE

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay