禁用 Spring Data 自动配置

更新于 2025-12-30

baeldung 2025-11-26

1. 引言

在本篇快速教程中,我们将探讨两种不同的方式来禁用 Spring Boot 中的数据库自动配置。这在测试时尤其有用。

我们将通过 Redis、MongoDB 和 Spring Data JPA 的示例进行说明。

首先,我们将介绍基于注解的方法,然后介绍基于属性文件(property file)的方法。

2. 使用注解禁用自动配置

我们先从 MongoDB 示例开始,看看需要排除哪些类:

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

类似地,我们可以禁用 Redis 的自动配置:

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

最后,我们来看如何禁用 Spring Data JPA 的自动配置:

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

3. 使用属性文件禁用自动配置

我们也可以通过属性文件来禁用自动配置。

首先以 MongoDB 为例:

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

接下来禁用 Redis 的自动配置:

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

最后,禁用 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. 测试

在测试中,我们将验证自动配置的 Spring Bean 是否确实未出现在应用上下文中。

首先测试 MongoDB,检查 MongoTemplate Bean 是否不存在:

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

接着测试 JPA,此时 DataSource Bean 应该不存在:

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

最后测试 Redis,检查 RedisTemplate Bean 是否不在上下文中:

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

5. 结论

在本文中,我们学习了如何为不同的数据库禁用 Spring Boot 的自动配置。