我正在尝试将我的Spring启动应用程序部署到云代工厂。但是我收到以下错误。
2016-02-19T16:54:29.57+0000 [App/0] ERR Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: Usage of 'UserCredentials' with 'MongoClient' is no longer supported. Please use 'MongoCredential' for 'MongoClient' or just 'Mongo'.
2016-02-19T16:54:29.57+0000 [App/0] ERR at org.springframework.data.mongodb.core.SimpleMongoDbFactory.<init>(SimpleMongoDbFactory.java:137)
2016-02-19T16:54:29.57+0000 [App/0] ERR at org.springframework.data.mongodb.core.SimpleMongoDbFactory.<init>(SimpleMongoDbFactory.java:78)
2016-02-19T16:54:29.57+0000 [App/0] ERR at org.cloudfoundry.reconfiguration.org.springframework.cloud.service.document.MongoDbFactoryCreator.create(MongoDbFactoryCreator.java:46)
2016-02-19T16:54:29.57+0000 [App/0] ERR at org.cloudfoundry.reconfiguration.org.springframework.cloud.service.document.MongoDbFactoryCreator.create(MongoDbFactoryCreator.java:35)
2016-02-19T16:54:29.57+0000 [App/0] ERR at org.cloudfoundry.reconfiguration.org.springframework.cloud.Cloud.getServiceConnector(Cloud.java:257)
2016-02-19T16:54:29.57+0000 [App/0] ERR at org.cloudfoundry.reconfiguration.org.springframework.cloud.Cloud.getSingletonServiceConnector(Cloud.java:167)
2016-02-19T16:54:29.57+0000 [App/0] ERR at org.cloudfoundry.reconfiguration.spring.AbstractCloudServiceBeanFactoryPostProcessor.reconfigureBean(AbstractCloudServiceBeanFactoryPostProcessor.java:119)
据我所知,Spring Boot会自动找到绑定的Mongo服务以及所有必要的用户凭据和URI详细信息,这意味着我不需要明确声明这些变量。
有谁知道我收到此错误的原因以及如何解决?
这是我的Java代码片段:
@Autowired
public MongoRepository(MongoClient mongo) {
this.mongo = mongo;
}
public long insert(Document document){
MongoDatabase db = mongo.getDatabase("test");
MongoCollection<Document> coll = db.getCollection("document");
coll.insertOne(document);
}
我正在使用Mongo3.0 java驱动程序。
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.0.0</version><!--$NO-MVN-MAN-VER$-->
</dependency>
答案 0 :(得分:2)
我没有使用Spring Boot,但我也遇到了这个错误。我通过使用以下配置解决了这个问题:
@Configuration
public class SpringMongoConfig {
public @Bean MongoClient mongoClient() {
return new MongoClient(new ServerAddress("127.0.0.1", 27017), new ArrayList<MongoCredential>() {
{
add(MongoCredential.createCredential("username", "dbname", "pwd".toCharArray()));
}
});
}
public @Bean MongoDbFactory mongoDbFactory() throws Exception {
return new SimpleMongoDbFactory(mongoClient(), "dbname");
}
public @Bean MongoTemplate mongoTemplate() throws Exception {
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
return mongoTemplate;
}
}
答案 1 :(得分:1)
您依靠Cloud Foundry Java buildpack auto-configuration来配置MongoDB连接。 Java buildpack依赖于Spring Cloud Connectors,Spring Data MongoDB和MongDB客户端库来创建必要的连接bean。 MongoDB客户端不久前做了一些更改,需要Spring Data MongDB和Spring Cloud Connectors进行更改。您正在使用的Java Buildpack似乎取决于这些库的旧版本。
您有几个选择。
您可以使用较新版本的Java buildpack推送您的应用。 JBP的version 3.2及更高版本似乎有适合您需求的库。
或者,您可以在应用程序中明确包含Spring Cloud Connectors 1.2.0或更高版本,这有效地禁用了Java buildpack自动配置。有关此方法的详细信息,请参阅Connectors docs。