You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot配置随机端口启动嵌入式Redis报错求助

嵌入式Redis配置随机端口启动失败的解决方案

问题复现

代码实现

@Value("${spring.redis.embedded.port}")
private int redisPort;

private RedisServer redisServer;

@PostConstruct
public void startRedisServer() throws IOException {
    System.out.println("port is "+redisPort);
    redisServer = new RedisServerBuilder()
            .port(redisPort)
           // .setting("bind 0.0.0.0")  // Listen on all network interfaces
            .build();
    redisServer.start();
    System.out.println("redis port is "+redisServer.ports());
}

@PreDestroy
public void stopRedisServer() {
    if (redisServer != null) {
        redisServer.stop();
    }
}

@Bean
public int redisPort() {
    return redisServer.ports().get(0);
}

配置与异常

在application-test.properties中配置spring.redis.embedded.port=0,期望让嵌入式Redis使用随机可用端口启动,却抛出异常:

Caused by: java.lang.RuntimeException: Can't start redis server. Check logs for details. Redis process log:
[16480] 24 Jan 10:32:04.901 # Configured to not listen anywhere, exiting.
at redis.embedded.AbstractRedisInstance.awaitRedisServerReady(AbstractRedisInstance.java:70)
at redis.embedded.AbstractRedisInstance.start(AbstractRedisInstance.java:42)
at redis.embedded.RedisServer.start(RedisServer.java:9)

解决方案

  • 启用网络绑定配置:取消注释代码中的.setting("bind 0.0.0.0"),让Redis监听所有网络接口。当端口设为0时,Redis需要明确指定绑定地址,否则会判定为无监听地址而退出。
  • 简化随机端口配置:如果不需要手动指定端口变量,可直接删除@Value注入的redisPort,让RedisServer自动分配随机端口,修改后的启动代码如下:
@PostConstruct
public void startRedisServer() throws IOException {
    redisServer = new RedisServerBuilder()
            .setting("bind 0.0.0.0")
            .build();
    redisServer.start();
    System.out.println("redis port is "+redisServer.ports());
}
  • 验证端口获取:redisServer.ports().get(0)可以正确获取到随机分配的端口,原有的redisPort() Bean配置无需修改。

内容的提问来源于stack exchange,提问作者Anju Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:35:25