我在单元测试中使用Redission和embedded-redis。根据文档,我在测试类中启动redis服务器,如下所示:
private RedisServer redisServer;
@PostConstruct
public void postConstruct() {
if (redisServer == null || !redisServer.isActive()) {
redisServer = RedisServer.builder()
.port(6900)
.setting("maxmemory 128M")
.build();
redisServer.start();
}
}
@PreDestroy
public void preDestroy() {
redisServer.stop();
}而redission客户端看起来如下:
@Configuration
@ConditionalOnClass(RedissonClient.class)
public class RedissonConfiguration {
@Bean(destroyMethod = "shutdown")
public RedissonClient redissonClient() {
Config config = new Config();
config.useSingleServer()
.setAddress("redis://localhost:6900");
return Redisson.create(config);
}
}现在,我在日志中得到了以下错误:
InstanceCleaner r.e.AbstractRedisInstance停止红色服务器..。InstanceCleaner r.e.AbstractRedisInstance :红松退出-7-5 o.r.c.h.ErrorsLoggingHandler :异常发生.频道: id: 0xa9eee5,L:/127.0.0.1:49429 - R:localhost/127.0.0.1:6699 java.io.IOException: Eine wurde vom Remotehost geschlossen
问题是preDestroy是在bean的destroyMethod (关机)之前调用的。是否有其他方法在结束时停止服务器?
我不能在RedissonConfiguration上使用@DependsOn,因为它依赖于TestConfiguration类。
发布于 2022-10-20 10:16:01
我找到了解决办法。这个接口是普通prod类的一部分。现在,我可以用dependsOn("EmbeddedRedis")对dependsOn bean进行注释。不太确定我是否满意,但它有效.
interface EmbeddedRedis {
@Component(value = "EmbeddedRedis")
@Profile("!local")
class EmptyRedis implements EmbeddedRedis {
}
@Component(value = "EmbeddedRedis")
@Profile("local")
class Redis implements EmbeddedRedis, DisposableBean {
private final int port;
private RedisServer redisServer;
public Redis(@Value("${spring.redis.port}")final int port) {
this.port = port;
}
@PostConstruct
public void postConstruct() {
if (redisServer == null || !redisServer.isActive()) {
redisServer = RedisServer.builder()
.port(port)
.setting("maxmemory 128M")
.build();
redisServer.start();
}
}
@Override
public void destroy() {
redisServer.stop();
}
}
}https://stackoverflow.com/questions/74123988
复制相似问题