当前位置: 首页 > 知识库问答 >
问题:

为mongodb的micronaut设置testcontainers

寿伟
2023-03-14

我在玩Testcontainers、Micronaut和Kotlin,不知何故Micronaut不想替换到我正在启动的MongoDB的动态端口及其目前的工作状态。

我还没有替换应用程序测试。(/src/test/resources)下的yml

micronaut:
  application:
    name: abc
mongodb:
  connection-pool:
    max-size: 20
  uri: mongodb://${MONGO_HOST:localhost}:${MONGO_PORT}

这是我的设置代码:

// class .....
companion object {
        private lateinit var embeddedServer: EmbeddedServer
        lateinit var mongoContainer: MongoContainer

        @BeforeAll
        @JvmStatic
        internal fun beforeAll() {
            mongoContainer = MongoContainer()
            mongoContainer.start()
            assertThatPortIsAvailable(mongoContainer)

            System.setProperty("MONGO_HOST", mongoContainer.containerIpAddress)
            System.setProperty("MONGO_PORT", mongoContainer.getPort().toString())

            println(System.getProperties()) // THE ENV VAR IS AVAILABLE HERE
            println("aaaaaaaa" + mongoContainer.getPort())

            embeddedServer = ApplicationContext.run(EmbeddedServer::class.java, PropertySource.of(
                    "test", mapOf(
                    "mongo.uri" to mongoContainer.containerIpAddress,
                    "mongo.port" to mongoContainer.getPort())
            ))
        }

错误消息:消息:无法解析占位符${MONGO_PORT}

共有2个答案

松俊美
2023-03-14

您最好提供完整的mongodb。uri通过实现TestPropertyProvider

我认为您希望使用mongoContainer获得实际端口。getMappedPort(27017)

燕英逸
2023-03-14

这帮助我在Kotlin与micronauts一起运行测试容器。

import a.b.c.model.NewOffer
import a.b.c.model.QuantityType
import io.micronaut.test.extensions.junit5.annotation.MicronautTest
import io.micronaut.test.support.TestPropertyProvider
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.testcontainers.containers.MongoDBContainer
import org.testcontainers.junit.jupiter.Testcontainers
import javax.inject.Inject

@Testcontainers
@MicronautTest()
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
internal class OfferRepositoryTest() : TestPropertyProvider {

    @Inject
    private lateinit var offerRepository: OfferRepository

    private val mongoDBContainer: MongoDBContainer = MongoDBContainer("mongo:4").apply { start() }

    @Test
    internal fun getEmptyOffers() {
        val find = offerRepository.find()
        assertThat(find).isEmpty()
    }

    override fun getProperties(): MutableMap<String, String> {
        return mutableMapOf(
                "MONGO_HOST" to mongoDBContainer.containerIpAddress,
                "MONGO_PORT" to "${mongoDBContainer.getMappedPort(27017)}"
        )
    }
}

以及src/main/resources/application。yml看起来是由micronaut生成的

mongodb:
  connection-pool:
    max-size: 20
  uri: mongodb://${MONGO_HOST:localhost}:${MONGO_PORT:27017}
 类似资料:
  • 我有一个基于Micronaut的网络应用程序,我在认证方面遇到了一些问题。这个问题特别与浏览器正在经历的变化有关,其中SameSite默认为Lax,如果您使用SameSite:none,那么cookie必须是安全的。我正在使用所有最新的稳定版本,例如Micronaut2.0.1。 Chrome给了我以下例外: set-cookie:JWT=EYJHBGCIOIJUB2..U5ODYXNZA2MX0

  • 在开发中,我使用下面的配置连接到MySQL数据库。我喜欢使用Tomcat数据源进行MySql连接。在Micronaut文档页面中没有找到示例。

  • 本文向大家介绍设置MongoDB $ slice带范围?,包括了设置MongoDB $ slice带范围?的使用技巧和注意事项,需要的朋友参考一下 要设置切片和范围,请使用带参数的$slice运算符。这些参数将针对要获取的元素的开始位置进行设置,第二参数针对范围。让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是设置范围的切片的查询- 这将产生以下输出

  • 本文向大家介绍如何设置MongoDB Java环境?,包括了如何设置MongoDB Java环境?的使用技巧和注意事项,需要的朋友参考一下 安装和运行MongoDB 访问MongoDB主页,在“软件”(下拉列表)中,选择“社区服务器”。 在“ MongoDB社区服务器”页面中,指定平台详细信息并下载与您的平台兼容的MongoDB服务器。 安装下载的软件,并在C驱动器中创建一个名为data的文件夹/

  • 主程序的日志文件包含大量的getmore oplog查询-我猜主程序上的任何操作都会创建一个oplog查询。在我看来,这是太多的复制开销,但我没有任何关于MongoDB负载的经验,也没有任何关键数据。 由于安装程序将不得不容忍更多的生产负载,我的问题是,复制开销是否是预期的,即使是在次要服务器上,CPU负载增加这么高是否正常,还是我遗漏了什么?

  • 我是MongoDB的新手。我正在探索封顶系列的选项。我创建了一个大小为10的capped集合,我假设它是字节。 我插入了一个大小为52的文档。(参考db.collection.stats()size选项) 既然这个文件的大小超过10b,它不应该被拒绝吗?