首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何定义preDestroy的redissonClient顺序和嵌入-redis

如何定义preDestroy的redissonClient顺序和嵌入-redis
EN

Stack Overflow用户
提问于 2022-10-19 10:43:23
回答 1查看 24关注 0票数 0

我在单元测试中使用Redission和embedded-redis。根据文档,我在测试类中启动redis服务器,如下所示:

代码语言:javascript
运行
复制
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客户端看起来如下:

代码语言:javascript
运行
复制
@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类。

EN

回答 1

Stack Overflow用户

发布于 2022-10-20 10:16:01

我找到了解决办法。这个接口是普通prod类的一部分。现在,我可以用dependsOn("EmbeddedRedis")对dependsOn bean进行注释。不太确定我是否满意,但它有效.

代码语言:javascript
运行
复制
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();
    }

  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74123988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档