2016-02-19 57 views
1

我试图将我的Spring引导应用程序部署到云代工。但是,我收到以下错误。不再支持使用MongoClient的UserCredentials

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) 

这是我理解的春天开机就会自动找到绑定蒙戈服务和所有必需的用户凭证和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

您是否在使用Spring Cloud连接器? – chrylis

+0

@chrylis没有我不使用春天云连接器。我不认为他们是必需的。 – Dave

回答

1

您正在依靠Cloud Foundry Java buildpack auto-configuration来配置MongoDB连接。 Java buildpack依赖于Spring云连接器,Spring Data MongoDB和MongDB客户端库来创建必要的连接Bean。 MongoDB客户端在前一段时间做了一些更改,要求Spring Data MongDBSpring Cloud Connectors也进行更改。看起来您正在使用的Java Buildpack取决于这些库的旧版本。

您有几个选项。

您可以使用较新版本的Java buildpack来推送您的应用程序。看起来,JBB的version 3.2和更高版本有你需要的正确的库。

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

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; 
    } 

}