Java Micronaut中的反应性mongoDB
我正在与Micronaut一起使用mongoDb,并尝试插入、获取、删除和更新记录。从这里开始,我遵循了指导方针 因为我没有在MongoDB中创建数据库 Micronaut配置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
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操作调用方