我正在使用redis的spring会话,但我想在进行测试时禁用它 . 我的课程注释:
@ActiveProfiles("integrationtests")
和我的application-integrationtests.tml文件包含:
spring.autoconfigure.exclude: org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
但它仍然失败:
Caused by: org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
如果我打开redis-server,测试工作,但当然我不想保持这种方式; )
// update
我一直在努力
@SpringBootTest(classes = {Application.class})
@ActiveProfiles("integrationtests")
和包含Redis的Application.class:
@SpringBootApplication(exclude={SessionAutoConfiguration.class, RedisAutoConfiguration.class, RedisHttpSessionConfiguration.class})
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
但它失败了:
Error creating bean with name 'redisMessageListenerContainer' defined in class path resource [org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.class]
spring autoconfigure debug看到我已经排除了这个类,但它没有效果:
Exclusions:
-----------
org.springframework.boot.autoconfigure.session.SessionAutoConfiguration
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration
2 回答
我在测试时用来解决这个Redis依赖的解决方法是在测试时使用
@ConditionalOnProperty
注释并设置属性(testing=true
) .使用以下代码进行会话配置:
以下代码用于单元测试:
No direct solution but yes there is a work around ,比如下面的
Test
类:您可以使用所有配置创建Base类,如下所示:
用于集成测试的子类没有
@EnableRedisHttpSession
对于所有其他配置文件,如dev,staging和prod,另一个使用
@EnableRedisHttpSession
,类似于以下开发:(可选)您可以将dev作为spring boot app的默认配置文件,在
application.properties
中指定spring.profiles.active
,如下所示:有关示例,您可以参考arpitaggarwal/spring-boot-redis