原标题:Spring Data MongoDB参考文档二(内容来源:Spring中国教育管理中心)
11.3.3.MongoDatabaseFactory 接口
虽然
com.mongodb.client.MongoClient是 MongoDB 驱动程序 API 的入口点,但连接到特定的 MongoDB 数据库实例需要其他信息,例如数据库名称和可选的用户名和密码。使用该信息,您可以获得一个com.mongodb.client.MongoDatabase对象并访问特定 MongoDB 数据库实例的所有功能。Spring 提供了org.springframework.data.mongodb.core.MongoDatabaseFactory如下清单所示的接口来引导连接到数据库:
public interface MongoDatabaseFactory { MongoDatabase getDatabase() throws DataAccessException; MongoDatabase getDatabase(String dbName) throws DataAccessException; }
以下部分展示了如何使用带有基于 Java 或基于 XML 的元数据的容器来配置MongoDatabaseFactory接口的实例。反过来,您可以使用该MongoDatabaseFactory实例来配置MongoTemplate.
您可以在标准 Java 代码中使用它们,而不是使用 IoC 容器来创建 MongoTemplate 的实例,如下所示:
public class MongoApp { private static final Log log = LogFactory.getLog(MongoApp.class); public static void main(String[] args) throws Exception { MongoOperations mongoOps = new MongoTemplate(new SimpleMongoClientDatabaseFactory(MongoClients.create(), "database")); mongoOps.insert(new Person("Joe", 34)); log.info(mongoOps.findOne(new Query(where("name").is("Joe")), Person.class)); mongoOps.dropCollection("person"); } }
粗体代码突出显示了
SimpleMongoClientDbFactory和入门部分中显示的清单之间的唯一区别。
SimpleMongoClientDbFactory在选择com.mongodb.client.MongoClient作为选择的入口点时 使用。
11.3.4.MongoDatabaseFactory使用基于 Java 的元数据注册实例
要向MongoDatabaseFactory容器注册实例,您编写的代码与前面代码清单中突出显示的非常相似。以下清单显示了一个简单的示例:
@Configuration
public class MongoConfiguration {
public @Bean MongoDatabaseFactory mongoDatabaseFactory() {
return new SimpleMongoClientDatabaseFactory(MongoClients.create(), "database");
}
}
MongoDB 服务器第 3 代在连接到数据库时更改了身份验证模型。因此,一些可用于身份验证的配置选项不再有效。您应该使用MongoClient-specific 选项来设置凭据MongoCredential以提供身份验证数据,如以下示例所示:
@Configuration
public class ApplicationContextEventTestsAppConfig extends AbstractMongoClientConfiguration {
@Override
public String getDatabaseName() {
return "database";
}
@Override
protected void configureClientSettings(Builder builder) {
builder
.credential(MongoCredential.createCredential("name", "db", "pwd".toCharArray()))
.applyToClusterSettings(settings -> {
settings.hosts(singletonList(new ServerAddress("127.0.0.1", 27017)));
});
}
}
为了在基于 XML 的配置中使用身份验证,请使用元素credential上的属