我的项目正在使用azure-documentdb-spring-boot-starter:0.2.0
与cosmosdb进行交互:
@Repository
public interface PingEasyRepo extends DocumentDbRepository<PingEasy, String> {
}
@Document(collection = "test")
public class PingEasy {
@Id
private String id;
private String content;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
代码运行,可以执行save和findAll。但是当我去azure portal和cosmosdb数据资源管理器时,数据没有出现。当我打开浏览器工具时,我看到
请求失败“500内部服务器错误:对象引用未设置为对象的实例。”和例外:
Uncaught TypeError: xhr.getResponseHeader is not a function
at Object.DocumentClientFactory._shouldForceRetry (DocumentClientFactory.js?v=1.17.110.1:12)
at HttpRequest.xhr.onreadystatechange (documentdbclient-1.14.0.js?v=1.17.110.1:3287)
at HttpRequest._onAjaxError (Request.js?v=1.17.110.1:42)
at i (jquery.min.js:2)
at Object.fireWith [as rejectWith] (jquery.min.js:2)
at y (jquery.min.js:4)
at XMLHttpRequest.c (jquery.min.js:4)
以下是我用来自动创建cosmodb的脚本:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"databaseAccountName": {
"type": "string",
"metadata": {
"description": "The MongoDB database account name. Needs to be globally unique."
}
}
},
"variables": {},
"resources": [
{
"apiVersion": "2015-04-08",
"type": "Microsoft.DocumentDB/databaseAccounts",
"kind": "MongoDB",
"name": "[parameters('databaseAccountName')]",
"location": "[resourceGroup().location]",
"properties": {
"databaseAccountOfferType": "Standard",
"name": "[parameters('databaseAccountName')]"
}
}
]
}
答案 0 :(得分:3)
问题是您正在创建MongoDB帐户并使用使用DocumentDB API编写数据的示例,如您链接的文章中所述。
Microsoft的Spring Boot Starter使开发人员能够使用通过使用DocumentDB API轻松与Azure Cosmos DB集成的Spring Boot应用程序。
MongoDB帐户旨在与MongoDB客户端和应用程序一起使用,而不是与DocumentDB API客户端和应用程序一起使用。
主要区别在于MongoDB所需的标识符字段是&#34; _id&#34;而DocumentDB / SQL帐户所需的标识符是&#34; id&#34;。当您通过MongoDB客户端(应用程序或使用其中一个MongoDB SDK的代码)将文档写入MongoDB帐户时,驱动程序/客户端会确保您的文档具有所需的&#34; _id&#34;现场或自动生成一个。当您使用DocumentDB API sdk / client和DocumentDB / SQL帐户时,sdk / client将自动生成所需的&#34; id&#34;字段。
Portal使用MongoDB客户端来读取MongoDB帐户中的文档,但是它无法读取文档,因为它们不是有效的MongoDB文档(没有所需的标识符)。如果您尝试使用自己编写的MongoDB应用程序读取文档,或者尝试使用像Robomongo或Mongo Chef这样的MongoDB客户端读取文档,则会遇到相同的错误。
在您的情况下,如果要使用Spring Boot示例,则需要创建DocumentDB / SQL帐户。在本文的屏幕截图中,您可以看到如何创建SQL帐户。
希望这有帮助。
答案 1 :(得分:0)
我尝试重现您的问题,但失败了。我按照这个official tutorial将Spring Boot Starter与Azure Cosmos DB DocumentDB API一起使用。
您可以参考下面的代码和我的步骤,这对我有用:
主类:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
@SpringBootApplication
public class JayGongCosmosDbSpringBootProjectApplication implements CommandLineRunner{
@Autowired
private UserRepository repository;
public static void main(String[] args) {
SpringApplication.run(JayGongCosmosDbSpringBootProjectApplication.class, args);
}
public void run(String... var1) throws Exception {
final User testUser = new User("testId", "testFirstName", "testLastName");
repository.deleteAll();
repository.save(testUser);
final User result = repository.findOne(testUser.getId());
System.out.printf("\n\n%s\n\n",result.toString());
}
}
用户类:
public class User {
private String id;
private String firstName;
private String lastName;
public User(String id, String firstName, String lastName) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return String.format("User: %s %s", firstName, lastName);
}
}
UserRepository类:
import com.microsoft.azure.spring.data.documentdb.repository.DocumentDbRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends DocumentDbRepository<User, String> {}
的pom.xml:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-documentdb-spring-boot-starter</artifactId>
<version>0.1.4</version>
</dependency>
然后我执行jar包并成功创建文档。
我注意到你使用的azure-documentdb-spring-boot-starter的版本是0.2.0而我使用的是0.1.4。我建议你改变版本再试一次。
希望它对你有所帮助。