Auto-Configuration Explained

What Auto-Configuration Does

Auto-configuration is Spring Boot looking at your classpath and properties and creating sensible beans for you. Add spring-boot-starter-data-jpa and a MySQL driver, and you get a DataSource, an EntityManagerFactory and a transaction manager without writing a single @Bean.

  • @SpringBootApplication = @SpringBootConfiguration + @ComponentScan + @EnableAutoConfiguration.
  • @EnableAutoConfiguration reads the file META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports from every jar.
  • Each listed class is an @AutoConfiguration guarded by @Conditional... annotations.
  • Your own beans always win: most auto-config beans use @ConditionalOnMissingBean.

Seeing the Decisions

Example

Start with --debug (or debug=true) to print the condition evaluation report:

java -jar shopease.jar --debug

Example output

============================
CONDITIONS EVALUATION REPORT
============================
Positive matches:
-----------------
   DataSourceAutoConfiguration matched:
      - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType'
   DataSourceConfiguration.Hikari matched:
      - @ConditionalOnClass found required class 'com.zaxxer.hikari.HikariDataSource'
Negative matches:
-----------------
   MongoAutoConfiguration:
      Did not match:
         - @ConditionalOnClass did not find required class 'com.mongodb.client.MongoClient'

Tip: In a running app, the Actuator endpoint /actuator/conditions shows the same report as JSON.

Turning One Off

@SpringBootApplication(exclude = { SecurityAutoConfiguration.class })
public class ShopEaseApplication { ... }

Example

Or from configuration:

application.yml

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration