使用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.host
和spring.data.mongodb.port
。 在这种情况下,应该使用spring.data.mongodb.uri
来提供所有配置,如下所示:
spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345
只需将spring.data.mongodb.uri
添加到您的application.yml
,您就可以获得自动配置的MongoDbFactory
和MongoTemplate
。
在你的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架构:
-
从mongodb 2.x开始,升级到3.0; 作为身份validation系统保持不变
-
如果您安装了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一起使用。