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

时间:2016-02-19 18:53:57

标签: java spring mongodb cloudfoundry pcf

我正在尝试将我的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>

2 个答案:

答案 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 MongDBSpring Cloud Connectors进行更改。您正在使用的Java Buildpack似乎取决于这些库的旧版本。

您有几个选择。

您可以使用较新版本的Java buildpack推送您的应用。 JBP的version 3.2及更高版本似乎有适合您需求的库。

或者,您可以在应用程序中明确包含Spring Cloud Connectors 1.2.0或更高版本,这有效地禁用了Java buildpack自动配置。有关此方法的详细信息,请参阅Connectors docs