Spring Boot 如何记录Sping Boot @ServiceConnection用于使用TestContainers启动的容器的端口?

mwyxok5s  于 5个月前  发布在  Spring
关注(0)|答案(1)|浏览(63)

在Sping Boot 3.2中,我有这样的测试配置:

@TestConfiguration(proxyBeanMethods = false)
class TestBootstrap {

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

}

fun main(args: Array<String>) {
    fromApplication<Bootstrap>().with(TestBootstrap::class).run(*args)
}

字符串
这很好用,但是我还想打印Spring/TestContainers在启动MongoDBContainer时使用的port。例如,我想在一个用@PostConstruct注解的方法中打印port:

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

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

    @PostConstruct
    fun printPort() {
        println("I want to print the port here")
    }
}


我该怎么做?

qncylg1j

qncylg1j1#

您可以使用方法getExposedPorts来获取暴露的端口列表,并使用getMappedPort(int originalPort)来获取Map端口。无论如何,对于只暴露一个端口的容器(如您创建的MongoDBContainer)的常见场景,您可以使用getFirstMappedPort()来检查Map端口。

@Bean
fun printPort(mongoDBContainer: MongoDBContainer): CommandLineRunner {
    return CommandLineRunner { _ ->
        println("Exposed Ports: ${mongoDBContainer.exposedPorts}")
        println("Mapped Ports: ${mongoDBContainer.firstMappedPort}")
    }
}

字符串

相关问题