1. 引言
在本快速教程中,我們將探討兩種不同的方法來禁用 Spring Boot 中的數據庫自動配置。 這在測試時非常有用。
我們將提供 Redis、MongoDB 和 Spring Data JPA 的示例。
我們首先將研究基於註解的方法,然後我們將研究基於屬性文件的方法。
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.DataSourceTransactionManagerAutoConfiguration4. 測試
為了進行測試,我們將檢查自動配置類中 Spring Bean 是否存在於我們的應用程序上下文中。
我們將從 MongoDB 測試開始。我們將驗證 MongoTemplate Bean 是否不存在:
@Test(expected = NoSuchBeanDefinitionException.class)
public void givenAutoConfigDisabled_whenStarting_thenNoAutoconfiguredBeansInContext() {
context.getBean(MongoTemplate.class);
}現在我們將檢查 JPA。對於 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);
}結論
在本文中,我們學習瞭如何針對不同的數據庫禁用 Spring Boot 自動配置。