1. 概述

Spring Boot 提供了强大的自动配置机制,能自动加载常见的数据库连接组件,例如 JPA、MongoDB、Redis 等。但在某些场景下,我们并不希望这些自动配置生效,例如:

✅ 单元测试中不需要连接数据库
✅ 项目中使用了自定义的数据源配置
✅ 想要排除某些不必要的依赖启动项以提升启动速度

本文将介绍两种主流方式来禁用 Spring Boot 的数据库自动配置:基于注解的方式基于配置文件的方式,并提供 Redis、MongoDB、JPA 的示例。


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

这是最常见也最直接的方式,使用 @SpringBootApplication 注解的 exclude 属性来排除特定的自动配置类。

2.1 禁用 MongoDB 自动配置

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

这两个类负责自动配置 MongoDB 的连接和数据层,排除后 Spring Boot 不会自动加载 MongoDB 的相关 Bean。

2.2 禁用 Redis 自动配置

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

⚠️ 注意:RedisRepositoryAutoConfiguration 是 Spring Data Redis 的自动配置类,如果你使用了 Spring Data Redis 的 Repository 功能,可以一并排除。

2.3 禁用 Spring Data JPA 自动配置

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

这三个类分别负责数据源、事务管理器和 Hibernate 的自动配置,排除后 Spring Boot 不会自动创建数据库连接池和 JPA 相关的 Bean。


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

如果你不想修改 Java 代码,也可以通过 application.propertiesapplication.yml 来禁用自动配置。

3.1 禁用 MongoDB 自动配置

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

3.2 禁用 Redis 自动配置

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

3.3 禁用 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 应用上下文(ApplicationContext)中是否存在某些 Bean 来验证自动配置是否被成功禁用。

4.1 测试 MongoDB 是否被禁用

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

4.2 测试 JPA 是否被禁用

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

4.3 测试 Redis 是否被禁用

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

只要测试通过,说明自动配置已被正确排除。


5. 总结

方式 适用场景 特点
注解方式 配置较少、希望代码直观 简洁明了,适合开发阶段
配置文件方式 多环境配置、希望解耦配置与代码 更加灵活,便于部署

推荐做法:在开发阶段使用注解方式快速排除,而在生产或测试环境中使用配置文件方式统一管理。


📌 完整示例代码可在 GitHub 获取
https://github.com/eugenp/tutorials/tree/master/spring-boot-modules/spring-boot-data


原始标题:Disable Spring Data Auto Configuration | Baeldung

« 上一篇: Java 中的矩阵乘法
» 下一篇: Java Weekly, 第289期