2016-02-19 223 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; 
    } 

}