Spring Boot allows developers to disable specific auto-configuration classes when the default configuration is not required or when custom configurations need to be used instead. This can be achieved either through annotations or application configuration files, giving complete control over which auto-configurations are loaded during application startup.
Key Points: • Auto-configuration can be selectively disabled when it is not needed. • The exclude attribute of @SpringBootApplication is the most common approach. • Multiple auto-configuration classes can be excluded simultaneously. • Auto-configurations can also be disabled through application.properties or application.yml. • Disabling unnecessary auto-configurations can improve startup performance and avoid configuration conflicts.
Why Disable Auto-Configuration?
Spring Boot automatically configures components based on available dependencies.
Example:
If Spring Boot detects:
• spring-boot-starter-data-jpa • MySQL Driver
It automatically creates:
• DataSource • EntityManager • TransactionManager
However, sometimes:
• A database is not required. • Custom configuration is needed. • An external system manages the resource. • Certain auto-configurations cause startup errors.
In such cases, specific auto-configurations can be disabled.
Method 1: Using @SpringBootApplication
The most commonly used approach is the exclude attribute.
Code Example:
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication(
exclude = {
DataSourceAutoConfiguration.class
}
)
public class EmployeeApplication {
public static void main(String[] args) {
SpringApplication.run(
EmployeeApplication.class,
args);
}
}In this example:
• Spring Boot will not create a DataSource. • Database-related auto-configuration is skipped.
Method 2: Excluding Multiple Auto-Configurations
Code Example:
@SpringBootApplication(
exclude = {
DataSourceAutoConfiguration.class,
SecurityAutoConfiguration.class
}
)This disables:
• Database auto-configuration • Spring Security auto-configuration
Method 3: Using application.properties
Code Example:
spring.autoconfigure.exclude=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfigurationSpring Boot reads these values during startup and excludes the specified configurations.
Method 4: Using application.yml
Code Example:
spring: autoconfigure: exclude: - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration - org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
How It Works Internally
Application Starts | Spring Boot Reads Dependencies | Auto-Configuration Classes Identified | Excluded Classes Removed | Remaining Configurations Loaded | Application Ready
Excluded configurations are skipped before bean creation begins.
Common Auto-Configurations That Are Disabled
• DataSourceAutoConfiguration • SecurityAutoConfiguration • MongoAutoConfiguration • RedisAutoConfiguration • MailSenderAutoConfiguration
The choice depends on application requirements.
Example: Suppose a Spring Boot application only processes files and does not use a database.
If:
spring-boot-starter-data-jpa
is accidentally added, Spring Boot attempts to create a DataSource and may fail during startup.
To prevent this:
@SpringBootApplication(
exclude = {
DataSourceAutoConfiguration.class
}
)The application starts successfully without database configuration.
Benefits of Disabling Auto-Configuration
• Faster application startup • Reduced memory usage • Avoids unnecessary bean creation • Prevents configuration conflicts • Allows full control over custom configurations
Real-World Example
A microservice only consumes Kafka messages and does not connect to a database.
Even if JPA dependencies are present for shared libraries, the service can exclude:
DataSourceAutoConfiguration
This prevents unnecessary database initialization and simplifies deployment.
Interview Tip: A concise interview answer is:
"Specific auto-configuration classes in Spring Boot can be disabled using the exclude attribute of @SpringBootApplication or by configuring the spring.autoconfigure.exclude property in application.properties or application.yml. This is useful when default configurations are not required or when custom implementations need to replace Spring Boot's automatic setup."