Java 不再支持将UserCredentials与MongoClient一起使用

Java 不再支持将UserCredentials与MongoClient一起使用,java,spring,mongodb,cloud-foundry,pcf,Java,Spring,Mongodb,Cloud Foundry,Pcf,我正在尝试将我的spring boot应用程序部署到cloud foundry。然而,我收到以下错误 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 'M

我正在尝试将我的spring boot应用程序部署到cloud foundry。然而,我收到以下错误

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)
2016-02-19T16:54:29.57+0000[App/0]错误原因:org.springframework.dao.InvalidDataAccessApiUsageException:不再支持将“UserCredentials”与“MongoClient”一起使用。请将“MongoCredential”用于“MongoClient”或仅用于“Mongo”。
2016-02-19T16:54:29.57+0000[App/0]错误位于org.springframework.data.mongodb.core.SimpleMongoDbFactory。(SimpleMongoDbFactory.java:137)
2016-02-19T16:54:29.57+0000[App/0]错误位于org.springframework.data.mongodb.core.SimpleMongoDbFactory.(SimpleMongoDbFactory.java:78)
2016-02-19T16:54:29.57+0000[App/0]错误地址:org.cloudfoundry.reconfiguration.org.springframework.cloud.service.document.MongoDbFactoryCreator.create(MongoDbFactoryCreator.java:46)
2016-02-19T16:54:29.57+0000[App/0]错误地址:org.cloudfoundry.reconfiguration.org.springframework.cloud.service.document.MongoDbFactoryCreator.create(MongoDbFactoryCreator.java:35)
2016-02-19T16:54:29.57+0000[App/0]错误地址:org.cloudfoundry.reconfiguration.org.springframework.cloud.cloud.getServiceConnector(cloud.java:257)
2016-02-19T16:54:29.57+0000[App/0]错误地址:org.cloudfoundry.reconfiguration.org.springframework.cloud.cloud.getSingletonServiceConnector(cloud.java:167)
2016-02-19T16:54:29.57+0000[App/0]错误位于org.cloudfoundry.reconfiguration.spring.AbstractCloudServiceBeanFactoryPostProcessor.reconfigureBean(AbstractCloudServiceBeanFactoryPostProcessor.java:119)
据我所知,Spring引导将自动找到绑定的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);
}
@Autowired
公共MongoRepository(MongoClient mongo){
this.mongo=mongo;
}
公共长插入(文档){
MongoDatabase db=mongo.getDatabase(“测试”);
MongoCollection coll=db.getCollection(“文档”);
coll.insertOne(文件);
}
我正在使用Mongo3.0 java驱动程序

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.0.0</version><!--$NO-MVN-MAN-VER$-->
</dependency>

org.mongodb
mongo java驱动程序
3.0.0

您依赖Cloud Foundry来配置MongoDB连接。Java构建包依赖于Spring云连接器、Spring数据MongoDB和MongDB客户机库来创建必要的连接bean。MongoDB客户机在不久前做了一些更改,这些更改需要并且也需要进行更改。您使用的Java构建包似乎依赖于这些库的旧版本

你有几个选择

您可以使用更新版本的Java buildpack来推送您的应用程序。看来JBP和更高版本都有适合您需要的库


或者,您可以在应用程序中显式地包括SpringCloudConnectors版本1.2.0或更高版本,这将有效地禁用JavaBuildPack自动配置。有关此方法的更多信息,请参阅

我没有使用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;
    }

}
@配置
公共类SpringMongoConfig{
public@Bean MongoClient MongoClient(){
返回新的MongoClient(新的服务器地址(“127.0.0.1”,27017),新的ArrayList(){
{
添加(MongoCredential.createCredential(“用户名”、“数据库名”、“pwd.tocharray()));
}
});
}
public@Bean MongoDbFactory MongoDbFactory()引发异常{
返回新的SimpleMongoDbFactory(mongoClient(),“dbname”);
}
public@Bean MongoTemplate MongoTemplate()引发异常{
MongoTemplate MongoTemplate=新的MongoTemplate(mongoDbFactory());
返回mongoTemplate;
}
}

您正在使用Spring Cloud连接器吗?@chrylis否我没有使用Spring Cloud连接器。我认为他们不是必需的。