Lesson 3 / 25
Auto-Configuration and the Main Class
Beans created for you, conditionally.
@SpringBootApplication
@SpringBootApplication combines configuration, component scanning of its package and below, and auto-configuration. Auto-configuration classes create beans conditionally: with the JPA starter and H2 on the classpath, Boot configures a DataSource, an EntityManagerFactory and transactions; with webmvc it starts Tomcat and configures JSON with Jackson. Your own beans take precedence. Run with --debug (or the conditions report) to see which auto-configurations applied and why.
The application class
This file is from a demo "shop" service generated by start.spring.io for Spring Boot 4.1.1 and Java 21 (Temurin 21.0.12), built with Maven 3.9.16; the project compiled and its tests passed. Typed properties are enabled here; seeding lives in a separate component (see the testing section for why).
package com.example.shop;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@SpringBootApplication
@EnableConfigurationProperties(ShopProperties.class)
public class ShopApplication {
public static void main(String[] args) {
SpringApplication.run(ShopApplication.class, args);
}
}Startup log lines, run
I packaged the demo with mvn package, started it with java -jar on port 8085 and called it with curl; the output is copied from that run. The embedded Tomcat started on the chosen port and the context was ready in about 5 seconds.
java -jar target/shop-0.0.1-SNAPSHOT.jar --server.port=8085
Output:
Tomcat started on port 8085 (http) with context path '/' Started ShopApplication in 5.003 seconds (process running for 5.452)
Quick check: What decides which auto-configurations apply?
- Only the main method arguments
- Alphabetical order
- A random choice
- Conditions such as classes on the classpath, existing beans and properties
Answer
Conditions such as classes on the classpath, existing beans and properties — Conditional configuration.