在Spring中配置MongoDB时,参考sais:
像这样注册MongoDB:
@Configuration
public class AppConfig {
/*
* Use the standard Mongo driver API to create a com.mongodb.Mongo instance.
*/
public @Bean Mongo mongo() throws UnknownHostException {
return new Mongo("localhost");
}
}
使用UnknownHostException检查异常来污染代码。使用checked异常是不可取的,因为基于Java的bean元数据使用方法作为设置对象依赖性的手段,使调用代码变得混乱。
所以Spring建议
@Configuration
public class AppConfig {
/*
* Factory bean that creates the com.mongodb.Mongo instance
*/
public @Bean MongoFactoryBean mongo() {
MongoFactoryBean mongo = new MongoFactoryBean();
mongo.setHost("localhost");
return mongo;
}
}
但不幸的是,因为Spring-Data-MongoDB 1.7 MongoFactoryBean 已被弃用并被 MongoClientFactoryBean 取代。
所以
@Bean
public MongoClientFactoryBean mongoClientFactoryBean() {
MongoClientFactoryBean factoryBean = new MongoClientFactoryBean();
factoryBean.setHost("localhost");
return factoryBean;
}
然后是时候配置只有一个实现 SimpleMongoDbFactory 的MongoDbFactory。 SimpleMongoDbFactory只有两个不推荐使用的初始化程序,其中一个是 SimpleMongoDbFactory(MongoClient,DataBase)。 但 MongoClientFactoryBean 只能返回 Mongo 的类型,而不能返回 MongoClient 。
那么,我是否遗漏了一些东西来使这个纯粹的Spring配置工作?
答案 0 :(得分:4)
是的,它会返回Mongo
: - (
但是,MongoClient
延伸Mongo
无论如何都是正常的,只需将@Autowire
豆作为Mongo
@Autowired
private Mongo mongo;
然后使用它
MongoOperations mongoOps = new MongoTemplate(mongo, "databaseName");
你真的需要SimpleMongoDbFactory
吗?请参阅this post。
答案 1 :(得分:3)
就我而言,我使用以下代码创建MongoTemplate
。我正在使用MongoRespository
。因为它只需要MongoTemplate
我只需要创建MongoTemplate
bean。
@Bean
public MongoTemplate mongoTemplate() throws Exception {
MongoClient mongoClient = new MongoClient("localhost");
MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongoClient, "kyc_reader_test");
return new MongoTemplate(mongoDbFactory);
}
在我的配置文件中,我添加了
@EnableMongoRepositories(basePackages = "mongo.repository.package.name")