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 的自动配置。