使用Java Spring连接到MongoDB 3.0

我在使用Spring访问带有凭据的MongoDB时遇到了问题。 虽然没有凭据,它就像一个魅力,使用它们只是失败说

Failed to authenticate to database [yourdatabase], username = [yourusername], password = [x******z] 

必须是因为新的auth默认值,您可以在http://docs.mongodb.org/manual/core/authentication/中阅读

在3.0版中更改:SCRAM-SHA-1是从3.0系列开始的MongoDB版本的默认机制。

问:有人发现了一种使用Spring凭证的方法吗? 您使用哪个版本的spring-data-mongodb来制作技巧?

经过大量的尝试和阅读,我找到了一种方法,使MongoDB 3.0可以使用身份validation。

这是MongoDB 3.0的新安装,不涉及升级。

我使用了这些maven依赖项:

  org.springframework.data spring-data-mongodb 1.6.2.RELEASE   org.mongodb mongo-java-driver 3.0.0  

作为父母

  org.springframework.boot spring-boot-starter-parent 1.2.2.RELEASE  

然后在我的配置文件中

 /** * DB connection Factory * * @return a ready to use MongoDbFactory */ @Bean public MongoDbFactory mongoDbFactory() throws Exception { // Set credentials MongoCredential credential = MongoCredential.createCredential(mongoUser, databaseName, mongoPass.toCharArray()); ServerAddress serverAddress = new ServerAddress(mongoHost, mongoPort); // Mongo Client MongoClient mongoClient = new MongoClient(serverAddress,Arrays.asList(credential)); // Mongo DB Factory SimpleMongoDbFactory simpleMongoDbFactory = new SimpleMongoDbFactory( mongoClient, databaseName); return simpleMongoDbFactory; } /** * Template ready to use to operate on the database * * @return Mongo Template ready to use */ @Bean public MongoTemplate mongoTemplate() throws Exception { return new MongoTemplate(mongoDbFactory()); } 

最后,无论您何时可以访问MongoTemplate bean,您都可以执行此操作

 mongoTemplate.insert(objectToStore, collectionName); 

如果您使用的是Mongo 3.0 Java驱动程序,则不支持spring.data.mongodb.hostspring.data.mongodb.port 。 在这种情况下,应该使用spring.data.mongodb.uri来提供所有配置,如下所示:

 spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345 

只需将spring.data.mongodb.uri添加到您的application.yml ,您就可以获得自动配置的MongoDbFactoryMongoTemplate

在你的pom中使用这个版本:

   org.mongodb mongo-java-driver 3.2.1    org.springframework.data spring-data-mongodb 1.8.2.RELEASE  

而这个配置在spring:

                                                 classpath:log4j/log4j_test.properties     

使用此配置,您只需注入MongoTemplate:

  @Autowired @Qualifier("mongoTemplateID") private MongoTemplate mongoTemplate; 

这应该工作正常=)

这是将MongoDB 3.0.7与Spring连接的xml版本(参数从属性文件传递):

         

然后在Java中,你得到像这样的mongoTemplate:

  @Autowired MongoTemplate mongoTemplate; public String mongoTest() { DBCollection dc = mongoTemplate.getCollection("yourCollection"); logger.debug("--get collection name=" + dc.getFullName()); } 

如何使Mongodb 3与Spring数据一起工作有两种可能性。 两者都涉及降级身份validation架构:

  1. 从mongodb 2.x开始,升级到3.0; 作为身份validation系统保持不变

  2. 如果您安装了mongo 3.0,则可以在创建用户之前降级身份validation架构。

要降级身份validation机制:

 var schema = db.system.version.findOne({"_id" : "authSchema"}) schema.currentVersion = 3 db.system.version.save(schema) 

或者您甚至可以拥有混合用户,有些是使用版本5(mongo 3)创建的,有些是使用版本3.除了您将能够仅使用使用版本3创建的用户连接(从Spring数据)。

您可以尝试3.0 + mongo 3 beta驱动程序:通常这种组合适用于“遗留代码”,但我没有设法使其与Spring Data一起使用。