在测试时禁用Spring Boot中的Redis自动配置

8
我正在尝试在使用Spring Boot进行测试时禁用Redis。我已经禁用了我的配置,但自动配置创建了一个默认连接,并因无法连接到不存在的服务而失败。为了测试,我满足于仅使用基本的内存缓存或无操作缓存。但这也不起作用。这是我尝试过的方法:
根据此问题,我将该配置添加到了我的测试应用程序属性中。
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相关的引用是我们的hibernate支持。
有人能解释一下如何在测试中关闭它吗?
3个回答

19
  • 在您的测试属性文件中排除这两个自动配置类:
    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

当我回到导致这个问题的代码时,我会试一下。谢谢。 - Christian Bongiorno

7

使用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

您可以尝试在使用了@TestConfiguration注解的类上,使用@EnableAutoConfiguration(exclude = {...})


1
如果您不想更改任何文件/代码,也可以通过环境变量来实现此操作:
SPRING_AUTOCONFIGURE_EXCLUDE=org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接