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

时间:2020-03-19 14:39:36

标签: mongodb spring-boot reactive-programming spring-webflux mongo-java-driver

在我的@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=]

该怎么做?

1 个答案:

答案 0 :(得分:1)

现在,作为一种解决方法,在插入之前,我使用document.getElementById("content").innerHTML = html; 进行迁移。它不支持ReactiveMongoDatabase,但是至少它可以创建集合。

具有更好解决方案的任何人都可以发布它,谢谢。