【问题标题】:Embedded Redis server fails to start嵌入式 Redis 服务器无法启动
【发布时间】:2020-10-14 08:06:23
【问题描述】:

我有一个 Springboot 项目,作为测试的一部分,我使用嵌入式 Redis 服务器。当我使用 Intellij 运行特定的测试类时,它工作正常并且测试通过。但是当我使用mvn clean test 命令运行测试时,我收到以下错误:

BeanCreationException:创建带有名称的 bean 时出错 'core.config.TestRedisConfiguration':调用 init 方法 失败的;嵌套异常是 java.lang.RuntimeException: Can't start redis 服务器。查看日志了解详情。

这是我的 pom.xml 文件中的依赖项:

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

这是我的 TestRedisConfiguration 类:

import org.springframework.beans.factory.annotation.Value
import org.springframework.boot.test.context.TestConfiguration
import redis.embedded.RedisServer
import redis.embedded.RedisServerBuilder
import javax.annotation.PostConstruct
import javax.annotation.PreDestroy

@TestConfiguration
class TestRedisConfiguration(@Value("\${redis.port:63799}") private val port: Int) {

    private val redisServer: RedisServer

    init {
        redisServer = RedisServerBuilder().port(port).build()
    }

    @PostConstruct
    fun postConstruct() {
        redisServer.start()
    }

    @PreDestroy
    fun preDestroy() {
        redisServer.stop()
    }
}

【问题讨论】:

  • @Value("\${redis.port:63799}" 中的 \ 是错字吗?
  • @Smile 你指的是哪一部分?我故意使用 63799 端口而不是默认的 6379
  • 使用 kotlin 时,\ 是必要的转义
  • 啊,好吧,我的错!
  • \ 用于转义那里的$,默认情况下,$ 符号计算{} 内的表达式并将结果放入字符串中。

标签: java spring spring-boot kotlin redis


【解决方案1】:

我遇到了类似的问题,从我收集的信息来看,如果您使用的是 maven 的 surefire 插件,那么测试将并行运行以提高速度和效率,并且服务器正试图在同一个端口上启动多个实例。

在我的例子中,我在我的 spring boot 应用程序上测试从不同配置文件加载的不同属性,所以我只需要更改每个配置文件各自属性文件中的端口。如果您有类似的情况,那么这可能对您有用。

如果这不是你的情况,你可以考虑几个想法。

  1. 您可以将端口设置为有界范围内的随机数来启动redis服务器,这样您的服务器启动时不会有端口冲突。在我看来,如果您正在运行大量测试,则此选项将无法扩展,并且无法保证即使在有界范围内使用随机数,您也不会遇到碰撞,尽管发生碰撞的概率会降低发生这种情况。

  2. 根据您的单元测试技术(JUnit、TestNG),您可以尝试将您的 redis 服务器作为套件的一部分启动,然后将其连接到启动/停止。

【讨论】:

    猜你喜欢
    • 2020-05-18
    • 1970-01-01
    • 2019-10-11
    • 2020-12-19
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    相关资源
    最近更新 更多