【问题标题】:Usage of UserCredentials with MongoClient is no longer supported不再支持将 UserCredentials 与 MongoClient 一起使用
【发布时间】:2016-02-19 18:53:56
【问题描述】:

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

据我了解,Spring Boot 会自动找到绑定的 Mongo 服务以及所有必要的用户凭据和 URI 详细信息,这意味着我不需要显式声明这些变量。

有谁知道我为什么会收到此错误以及如何解决?

这是我的 Java 代码 sn-p:

@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>

【问题讨论】:

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

标签: java spring mongodb cloud-foundry pcf


【解决方案1】:

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

}

【讨论】:

    【解决方案2】:

    您依赖 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 来推送您的应用程序。看来version 3.2 及更高版本的 JBP 具有满足您需求的正确库。

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

    【讨论】:

      猜你喜欢
      • 2015-02-20
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 2022-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      相关资源
      最近更新 更多