使用spring数据mongodb获取MongoDatabase

时间:2017-08-23 22:51:31

标签: spring mongodb spring-data spring-data-mongodb

我试图无限期地拖尾mongo oplog集合。我目前使用的代码如下。

MongoClient mongoClient = new MongoClient(<host>,<27017>);

MongoCollection oplogColl =
                   mongoClient
                           .getDatabase("local")
                           .getCollection("oplog.rs");

MongoCursor oplogCursor =
                   oplogColl
                           .find(new Document("ts", filter))
                           .cursorType(CursorType.TailableAwait)
                           .noCursorTimeout(true)
                           .sort(new Document("$natural", 1))
                           .iterator();

我正在尝试使用spring-data获得相同的实现,其中mongo uri将在属性文件中指定。因此我需要访问MongoDatabase或MongoClient。

在spring中尝试使用MongodbFactory类,但它返回DB类型的实例,这是一个访问mongo的旧mongo实现。

如何使用spring数据使用MongoDatabase / MongoCollection / MongoClient。

1 个答案:

答案 0 :(得分:0)

MongoClient扩展Mongo,所以

@Configuration
public class AppConfig {
   public @Bean Mongo mongo() throws UnknownHostException {
       return new Mongo("localhost");
   }
}

如果您不想直接编写Mongo类

/*
* Factory bean that creates the com.mongodb.Mongo instance
*/
@Bean
public MongoClientFactoryBean mongo() {
    MongoClientFactoryBean mongo = new MongoClientFactoryBean();
    mongo.setHost("localhost");
    return mongo;
}

修改

@Configuration
public class AppConfig {
   public @Bean MongoClient mongo() throws UnknownHostException {
       return new MongoClient("localhost");
   }
}

用法:

@Autowired
private Mongo mongo;

MongoOperations mongoOps = new MongoTemplate(mongo, "databaseName");

修改

@Autowired
private MongoClient mongoClient;

MongoOperations mongoOps = new MongoTemplate(mongoClient, "databaseName");