init 方法调用失败;嵌套异常是 java.lang.RuntimeException: 无法启动 redis 服务器

Invocation of init method failed; nested exception is java.lang.RuntimeException: Can't start redis server

我在我们的 Webflux 测试用例中使用嵌入式 Redis,使用 pom.xml 文件中的以下依赖项

<dependency>
    <groupId>com.github.kstyrc</groupId>
    <artifactId>embedded-redis</artifactId>
    <version>0.6</version>
</dependency>

并为控制器测试使用以下注释 classes

@RunWith(SpringRunner.class)
@AutoConfigureWebTestClient(timeout = "36000000")
@WithMockUser
@TestPropertySource(locations = "classpath:application-test.properties")
@SpringBootTest(classes = Application.class)
@DirtiesContext

当我运行个人控制器测试class时,所有控制器测试都通过了。

当我启动两个控制器测试 classes 时,一个控制器测试 class 失败并出现以下错误:

Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'embededRedis': Invocation of init method failed; nested exception is java.lang.RuntimeException: Can't start redis server. Check logs for details.

下面是我在 JUnit 测试中使用的嵌入式 Redis class

@Component
public class EmbededRedis {
    @Value("${spring.redis.port}")
    private int redisPort;
    private RedisServer redisServer;

    @PostConstruct
    public void startRedis() throws IOException {
        if(redisServer==null||!redisServer.isActive()) {
        redisServer = new RedisServer(redisPort);
        redisServer.start();
    }
    }

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

检查Redis端口是否可用。如果没有,尝试分配一个不同的端口

@Component
public class EmbededRedis {
    @Value("${spring.redis.port:9999}")
    private int redisPort;
    private RedisServer redisServer;

    @PostConstruct
    public void startRedis() throws IOException {
        if(redisServer==null||!redisServer.isActive()) {
        redisServer = new RedisServer(redisPort);
        redisServer.start();
    }
    }

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

重启系统后问题已解决