Java Micronaut中的反应性mongoDB

Java Micronaut中的反应性mongoDB,java,mongodb,micronaut,mongo-java,micronaut-data,Java,Mongodb,Micronaut,Mongo Java,Micronaut Data,我正在与Micronaut一起使用mongoDb,并尝试插入、获取、删除和更新记录。从这里开始,我遵循了指导方针 因为我没有在MongoDB中创建数据库 Micronaut配置 mongodb: uri: "mongodb://${MONGO_HOST:localhost}:${MONGO_PORT:27017/FeteBird-Product}" 存储库 @Singleton public class Repository<T> implements I

我正在与Micronaut一起使用mongoDb,并尝试插入、获取、删除和更新记录。从这里开始,我遵循了指导方针

因为我没有在MongoDB中创建数据库

Micronaut配置

mongodb:
  uri: "mongodb://${MONGO_HOST:localhost}:${MONGO_PORT:27017/FeteBird-Product}"
存储库

@Singleton
public class Repository<T>  implements IRepository<T>{
    private final MongoClient mongoClient;
    public Repository(MongoClient mongoClient) {
        this.mongoClient = mongoClient;
    }

    @Override
    public MongoCollection<T> getCollection(String collectionName, Class<T> typeParameterClass) {
        return mongoClient
                .getDatabase("FeteBird-Product")
                .getCollection(collectionName, typeParameterClass);
    }
}
@Singleton
公共类存储库实现了IRepository{
私人最终MongoClient MongoClient;
公共存储库(MongoClient MongoClient){
this.mongoClient=mongoClient;
}
@凌驾
公共MongoCollection getCollection(字符串collectionName,类类型ParameterClass){
返回mongoClient
.getDatabase(“FeteBird产品”)
.getCollection(collectionName,typeParameterClass);
}
}
插入操作

public Flowable<List<Product>> findByFreeText(String text) {
        LOG.info(String.format("Listener --> Listening value = %s", text));
        try {
            Product product = new Product();
            product.setDescription("This is the test description");
            product.setName("This is the test name");
            product.setPrice(100);
            product.setId(UUID.randomUUID().toString());
            Single.fromPublisher(this.repository.getCollection("product", Product.class).insertOne(product))
                    .map(item -> product);

        } catch (Exception ex) {
            System.out.println(ex);
        }

        return Flowable.just(List.of(new Product()));
    }
公共可流动findByFreeText(字符串文本){
LOG.info(String.format(“侦听器-->侦听值=%s”,文本));
试一试{
产品=新产品();
产品说明(“这是测试说明”);
product.setName(“这是测试名称”);
产品定价(100);
product.setId(UUID.randomuid().toString());
Single.fromPublisher(this.repository.getCollection(“product”,product.class).insertOne(product))
.map(项目->产品);
}捕获(例外情况除外){
系统输出打印项次(ex);
}
返回Flowable.just(新产品()的列表);
}

数据库中没有插入或创建记录,我做错了什么?

是的,没有创建任何记录,因为您使用的是无订阅的反应式
。然后它就永远不会被执行。因此,您必须调用
subscribe()
,告诉
单曲
它可以开始工作:

Single.fromPublisher(repository.getCollection(“product”,product.class).insertOne(product))
.subscribe();
注意:如果不使用订阅结果,则不需要将项目映射到产品
.map(项目->产品)


在链接示例中,对于第一个外观,没有订阅,因为控制器方法返回
Single
,在这种情况下,订阅方是REST操作调用方