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

mwyxok5s  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(138)

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

  1. @TestConfiguration(proxyBeanMethods = false)
  2. class TestBootstrap {
  3. @Bean
  4. @ServiceConnection
  5. @RestartScope
  6. fun mongoDbContainer() = MongoDBContainer("mongo")
  7. }
  8. fun main(args: Array<String>) {
  9. fromApplication<Bootstrap>().with(TestBootstrap::class).run(*args)
  10. }

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

  1. @TestConfiguration(proxyBeanMethods = false)
  2. class TestBootstrap {
  3. private val log = loggerFor<TestBootstrap>()
  4. @Bean
  5. @ServiceConnection
  6. @RestartScope
  7. fun mongoDbContainer() = MongoDBContainer("mongo")
  8. @PostConstruct
  9. fun printPort() {
  10. println("I want to print the port here")
  11. }
  12. }


我该怎么做?

qncylg1j

qncylg1j1#

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

  1. @Bean
  2. fun printPort(mongoDBContainer: MongoDBContainer): CommandLineRunner {
  3. return CommandLineRunner { _ ->
  4. println("Exposed Ports: ${mongoDBContainer.exposedPorts}")
  5. println("Mapped Ports: ${mongoDBContainer.firstMappedPort}")
  6. }
  7. }

字符串

相关问题