ReactiveMongoDatabase:如何预先创建集合:无法在多文档事务中创建命名空间

Posted

技术标签:

【中文标题】ReactiveMongoDatabase:如何预先创建集合:无法在多文档事务中创建命名空间【英文标题】:ReactiveMongoDatabase: How to create collection beforehand: Cannot create namespace in multi-document transaction 【发布时间】:2020-06-30 17:15:07 【问题描述】:

在我的@SpringBootTest 中,在 ReactiveMongoDatabase 中创建集合似乎是不可能的,但应该很容易。有什么帮助吗?

bean 是(我想如果我想使用响应式,这是我应该使用的 bean?)

    @Bean
    Mono<MongoDatabase> reactiveMongoDatabase() 
        // recommended way in ReactiveMongoTransactionManager javadoc
        log.info("Creating reactiveMongoDatabase...");
        return ReactiveMongoDatabaseUtils.getDatabase(properties.getDatabase(), reactiveMongoDatabaseFactory());
    

在集成测试中,我尝试创建这样的集合:

    @Autowired
    private ReactiveMongoTemplate template;

    @BeforeEach
    private void createColletion() 
        //mongoDatabase.createCollection("Coupon");
        template.createCollection(Coupon.class);
    

但我仍然收到错误:

[ENV=itest] [productName=promotion-facts-sync] [2020-03-19T14:26:09.801Z] [ERROR] [MSG=[Thread-20] e.v.c.p.f.service.SyncProcessService - Error while processing empty message. Cause: Cannot create namespace promotion-facts-sync.Coupon in multi-document transaction.; nested exception is com.mongodb.MongoWriteException: Cannot create namespace promotion-facts-sync.Coupon in multi-document transaction. ][TRACE=] [SPAN=]

如何做到这一点?

【问题讨论】:

可以尝试使用ReactiveMongoTemplate类方法。 我试过但没有效果。检查编辑。 mongod中的数据库命令是create,我对reactive不熟悉,但是你应该能够找到是否有东西使用这个命令或者是否有办法运行特定命令. @Joe 是的,这一切都在 shell 中工作,但在代码中似乎没有办法,但事先迁移工作 【参考方案1】:

现在作为一种解决方法,我在任何插入之前使用mongobee 进行迁移。它不支持 ReactiveMongoDatabase,但至少它可以创建集合。

谁有更好的解决方案可以发帖,谢谢。

【讨论】:

以上是关于ReactiveMongoDatabase:如何预先创建集合:无法在多文档事务中创建命名空间的主要内容,如果未能解决你的问题,请参考以下文章

如何发布nuget预发行版本包

如何停止预加载?

nuxt 如何预加载大图片

如何获取微信开放平台的预授权码

如何知道在右舷层的钴上完成了预加载?

STM32定时器的预装载值和预分频系数如何确立