How can you disable specific auto-configuration classes in Spring Boot?

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.SecurityAutoConfiguration

Spring 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."