fre*_*man 5 java spring redis spring-data-redis spring-session
我正在将 spring 会话与 redis 一起使用,但我想在进行测试时禁用它。我的班级有注释:
@ActiveProfiles("integrationtests")
Run Code Online (Sandbox Code Playgroud)
我的 application-integrationtests.tml 文件包含:
spring.autoconfigure.exclude: org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
Run Code Online (Sandbox Code Playgroud)
但它仍然失败:
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
Run Code Online (Sandbox Code Playgroud)
如果我打开 redis-server ,测试就会工作,但我当然不想保持这种状态;)
//更新
我一直在尝试
@SpringBootTest(classes = {Application.class})
@ActiveProfiles("integrationtests")
Run Code Online (Sandbox Code Playgroud)
和排除 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);
}
}
Run Code Online (Sandbox Code Playgroud)
但它失败了:
Error creating bean with name 'redisMessageListenerContainer' defined in class path resource [org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.class]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
没有直接的解决方案,但有一个解决方法,例如Test
下面的课程:
@SpringBootTest(classes = { ApplicationConfig.class })
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles("integrationtests")
public class SpringBootRedisApplicationTest {
@Autowired
private StudentRepository studentRepository;
@Test
public void test() {
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用所有配置创建基类,如下所示:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.spring.boot.redis.repository" })
public class ApplicationConfig {
@Bean
public JedisConnectionFactory jedisConnFactory() {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setUsePool(true);
jedisConnectionFactory.setHostName("localhost");
jedisConnectionFactory.setPort(6379);
return jedisConnectionFactory;
}
@SuppressWarnings("rawtypes")
@Bean
public RedisTemplate redisTemplate() {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(jedisConnFactory());
return redisTemplate;
}
@Bean
public RedisHttpSessionConfiguration redisHttpSessionConfiguration() {
return new RedisHttpSessionConfiguration();
}
}
Run Code Online (Sandbox Code Playgroud)
以及没有集成测试的子类@EnableRedisHttpSession
@Configuration
@Profile({ "integrationtests", "unittest" })
public class IntegrationTestConfig extends ApplicationConfig {
}
Run Code Online (Sandbox Code Playgroud)
另一个用于@EnableRedisHttpSession
所有其他配置文件,如 dev、staging 和 prod,类似于下面的 dev:
@Profile({ "dev" })
@Configuration
@EnableRedisHttpSession
public class DevConfig extends ApplicationConfig {
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以将 dev 设置为 spring boot 应用程序的默认配置文件,并spring.profiles.active
在 中application.properties
指定,如下所示:
spring.profiles.active=dev
Run Code Online (Sandbox Code Playgroud)
示例示例,您可以参考arpitaggarwal/spring-boot-redis
归档时间: |
|
查看次数: |
6025 次 |
最近记录: |