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

如何打印Spring Boot @ServiceConnection启动TestContainers容器的端口?

如何在Spring Boot 3.2中打印TestContainers MongoDB容器的映射端口

有两种简洁的实现方式:

方式一:@Autowired注入容器实例

直接在TestBootstrap类中注入已声明的MongoDBContainer Bean,再在@PostConstruct方法中获取端口:

@TestConfiguration(proxyBeanMethods = false)
class TestBootstrap {
    private val log = loggerFor<TestBootstrap>()

    @Autowired
    private lateinit var mongoDbContainer: MongoDBContainer

    @Bean
    @ServiceConnection
    @RestartScope
    fun mongoDbContainer() = MongoDBContainer("mongo")

    @PostConstruct
    fun printPort() {
        // 获取容器内部27017端口对应的宿主机映射端口
        val mappedPort = mongoDbContainer.getMappedPort(27017)
        log.info("MongoDB容器映射端口:$mappedPort")
        // 单端口场景也可简化为:val mappedPort = mongoDbContainer.firstMappedPort
    }
}

方式二:构造函数注入容器实例

采用构造注入的方式获取容器Bean,更符合Spring依赖注入的最佳实践:

@TestConfiguration(proxyBeanMethods = false)
class TestBootstrap(private val mongoDbContainer: MongoDBContainer) {
    private val log = loggerFor<TestBootstrap>()

    @Bean
    @ServiceConnection
    @RestartScope
    fun mongoDbContainer() = MongoDBContainer("mongo")

    @PostConstruct
    fun printPort() {
        val mappedPort = mongoDbContainer.getMappedPort(27017)
        log.info("MongoDB容器映射端口:$mappedPort")
    }
}

关键说明

  • @ServiceConnection会自动启动TestContainers容器,因此@PostConstruct执行时,容器已完成端口映射,可安全获取端口值。
  • getMappedPort(27017)对应MongoDB默认的内部端口;若容器仅暴露单个端口,使用firstMappedPort属性会更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:57:16