测试时在spring boot中禁用Redis AutoConfig

Posted

技术标签:

【中文标题】测试时在spring boot中禁用Redis AutoConfig【英文标题】:Disable Redis AutoConfig in spring boot when testing 【发布时间】:2018-02-08 18:34:56 【问题描述】:

我在使用 Spring Boot 进行测试时尝试禁用 Redis。我已禁用我的配置,但自动配置创建了默认连接并失败,因为它无法连接到不存在的服务。对于测试,我满足于只使用基本的内存缓存或无操作缓存。那也行不通。这是我尝试过的:

根据this issue,我将上述配置添加到我的测试应用程序属性中

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration

但是。这让我更进一步。但最终我得到了 NoSuchBeanDefinitionException redisTemplate - 这是因为 redisReferenceResolver 正在尝试查找。

现在看看我的调试器,它试图水合的 bean 是: org.springframework.data.redis.core.convert.ReferenceResolverImpl 来自 spring-data-redis:1.8.0.RELEASE 来自此依赖项:compile('org.springframework.boot:spring-boot-starter-data-redis') 。我承认,bean 名称有点误导。它实际解析的类型不是

唯一对 redis 的引用是在我们的休眠支持中。

有人能解释一下如何关闭它进行测试吗?

【问题讨论】:

【参考方案1】: 尝试在您的测试属性文件中排除这两个自动配置类:spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration

排除 org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration 并设置:spring.data.redis.repositories.enabled=false

【讨论】:

当我返回导致我这个问题的代码时,我会试一试。谢谢【参考方案2】:

使用 YAML 语法(和 Spring Boot):

spring.autoconfigure:
  exclude:
    - org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
    - org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration

如果您的应用上下文中有SystemEnvironmentPropertySource,您可以使用环境变量SPRING_AUTOCONFIGURE_EXCLUDE 用逗号分隔项目:

SPRING_AUTOCONFIGURE_EXCLUDE=org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration

【讨论】:

【参考方案3】:

如果您不想更改任何文件/代码,也可以使用环境变量来执行此操作:

SPRING_AUTOCONFIGURE_EXCLUDE=org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration

【讨论】:

以上是关于测试时在spring boot中禁用Redis AutoConfig的主要内容,如果未能解决你的问题,请参考以下文章

使用spring boot多次超时时禁用redis

禁用 Spring Boot 启动器 Cassandra 进行单元测试

Spring Boot:禁用 Spring Boot 单元测试的安全性 [重复]

如何在 Spring Boot 2.2.0 的集成测试中禁用安全性?

Spring Boot 禁用 Swagger 的三种方式

从 Spring-Boot 测试中排除 elasticsearchTemplate