Disable Spring Data Auto Configuration

1. Introduction

In this quick tutorial, we’ll explore two different ways to disable database auto-configuration in Spring Boot, which can come in handy, say, when testing.

We’ll see examples for Redis, MongoDB, and Spring Data JPA.

Firstly, we’ll start by looking at the annotation-based approach and then we’ll look at the property file approach.

2. Disable Using Annotation

Let’s start with the MongoDB example, we’ll look at classes that need to be excluded:

@SpringBootApplication(exclude = {
    MongoAutoConfiguration.class, 
    MongoDataAutoConfiguration.class
})

Similarly, let’s look at disabling auto-configuration for Redis:

@SpringBootApplication(exclude = {
    RedisAutoConfiguration.class, 
    RedisRepositoryAutoConfiguration.class
})

Finally, let’s look at disabling auto-configuration for Spring Data JPA:

@SpringBootApplication(exclude = {
    DataSourceAutoConfiguration.class, 
    DataSourceTransactionManagerAutoConfiguration.class, 
    HibernateJpaAutoConfiguration.class
})

3. Disable Using Property File

We can also disable auto-configuration using the property file, let’s first explore it with MongoDB:

spring.autoconfigure.exclude= \
  org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration, \
  org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration

Now, let’s disable it for Redis:

spring.autoconfigure.exclude= \
  org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration, \
  org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration

Similarly, let’s disable it for Spring Data JPA:

spring.autoconfigure.exclude= \ 
  org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, \
  org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration, \
  org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration

4. Testing

For testing, we’ll check that the Spring beans for the auto-configured classes are absent in our application context.

Let’s start with the test for MongoDB. We’ll verify if the MongoTemplate bean is absent:

@Test(expected = NoSuchBeanDefinitionException.class)
public void givenAutoConfigDisabled_whenStarting_thenNoAutoconfiguredBeansInContext() { 
    context.getBean(MongoTemplate.class); 
}

Now, let’s check for JPA. For JPA, the DataSource bean will be absent:

@Test(expected = NoSuchBeanDefinitionException.class)
public void givenAutoConfigDisabled_whenStarting_thenNoAutoconfiguredBeansInContext() {
    context.getBean(DataSource.class);
}

Similarly, for Redis we’ll check the RedisTemplate bean in our application context:

@Test(expected = NoSuchBeanDefinitionException.class)
public void givenAutoConfigDisabled_whenStarting_thenNoAutoconfiguredBeansInContext() {
    context.getBean(RedisTemplate.class);
}

5. Conclusion

In conclusion, in this quick tutorial, we’ve explored the ways to disable Spring Boot auto-configuration for different databases.

The source code for all examples in the article is available on GitHub.

Related posts:

Guide to the Volatile Keyword in Java
An Intro to Spring Cloud Vault
Anonymous Classes in Java
Spring’s RequestBody and ResponseBody Annotations
Introduction to Netflix Archaius with Spring Cloud
Một số nguyên tắc, định luật trong lập trình
Hướng dẫn Java Design Pattern – Abstract Factory
Interface trong Java 8 – Default method và Static method
Guide to the Java Clock Class
Chuyển đổi Array sang ArrayList và ngược lại
Convert String to Byte Array and Reverse in Java
Java Program to Implement Segment Tree
Tìm hiểu về xác thực và phân quyền trong ứng dụng
Getting Started with Stream Processing with Spring Cloud Data Flow
Immutable Objects in Java
Spring Boot - Exception Handling
Java Program to Remove the Edges in a Given Cyclic Graph such that its Linear Extension can be Found
Spring Boot - Actuator
Java Program to Find Transitive Closure of a Graph
Câu lệnh điều khiển vòng lặp trong Java (break, continue)
Java Program to Use the Bellman-Ford Algorithm to Find the Shortest Path
Luồng Daemon (Daemon Thread) trong Java
Java Program to Implement the One Time Pad Algorithm
Mệnh đề if-else trong java
Java Program to Implement Hash Tables Chaining with Binary Trees
Using Spring ResponseEntity to Manipulate the HTTP Response
“Stream has already been operated upon or closed” Exception in Java
Java Program to Implement Fibonacci Heap
Migrating from JUnit 4 to JUnit 5
Java Program to Implement Segment Tree
Java – Reader to Byte Array
Comparing Objects in Java