Persistence top

Get started with Spring Data JPA through the reference Learn Spring Data JPA course:

>> CHECK OUT THE COURSE

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.

Persistence bottom
Get started with Spring Data JPA through the reference Learn Spring Data JPA course: >> CHECK OUT THE COURSE
Comments are closed on this article!