Попробуйте воспроизвести проблему, но она не удалась, пожалуйста, посмотрите мой тестовый код:
public class Test {
static private String YOUR_COSMOS_DB_ENDPOINT = "https://***.documents.azure.com:443/";
static private String YOUR_COSMOS_DB_MASTER_KEY = "***";
static DocumentClient client = new DocumentClient(
YOUR_COSMOS_DB_ENDPOINT,
YOUR_COSMOS_DB_MASTER_KEY,
new ConnectionPolicy(),
ConsistencyLevel.Session);
public static void main(String[] args) throws Exception {
createDocumentCollectionIfNotExists("db", "test");
for (int i = 1; i <= 10; i++) {
Document document = new Document();
document.set("id", i + "");
createDocument("db", "test", document);
}
queryCollection("db", "test");
deleteCollection("db", "test");
}
public static void createDocumentCollectionIfNotExists(String databaseName, String collectionName) throws Exception {
String databaseLink = String.format("/dbs/%s", databaseName);
String collectionLink = String.format("/dbs/%s/colls/%s", databaseName, collectionName);
try {
client.readCollection(collectionLink, null);
System.out.println(String.format("Found %s", collectionName));
} catch (DocumentClientException de) {
if (de.getStatusCode() == 404) {
DocumentCollection collectionInfo = new DocumentCollection();
collectionInfo.setId(collectionName);
RequestOptions requestOptions = new RequestOptions();
requestOptions.setOfferThroughput(400);
client.createCollection(databaseLink, collectionInfo, requestOptions);
} else {
throw de;
}
}
}
public static void queryCollection(String databaseName, String collectionName) {
FeedOptions queryOptions = new FeedOptions();
queryOptions.setEnableCrossPartitionQuery(true);
queryOptions.setMaxDegreeOfParallelism(-1);
String collectionLink = String.format("/dbs/%s/colls/%s", databaseName, collectionName);
System.out.println(collectionLink);
Iterable<Document> queryResults = client.queryDocuments(
collectionLink,
String.format("select * from c", collectionName),
queryOptions).getQueryIterable();
for (Document doc : queryResults) {
System.out.println(doc.getId());
}
}
public static int createDocument(String databaseName, String collectionName, Document document) throws DocumentClientException {
System.out.println("trying to write to database ,id: " + document.get("id"));
String collectionLink = String.format("/dbs/%s/colls/%s", databaseName, collectionName);
ResourceResponse<Document> response = client.createDocument(collectionLink, document, new RequestOptions(), false);
return response.getStatusCode();
}
public static void deleteCollection(String databaseName, String collectionName) throws DocumentClientException {
FeedOptions queryOptions = new FeedOptions();
queryOptions.setEnableCrossPartitionQuery(true);
queryOptions.setMaxDegreeOfParallelism(-1);
String collectionLink = String.format("/dbs/%s/colls/%s", databaseName, collectionName);
System.out.println(collectionLink);
client.deleteCollection(collectionLink, null);
System.out.println("delete......collection....");
}
}
Моя версия SDK:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-documentdb</artifactId>
<version>2.4.0</version>
</dependency>
Выход:
![enter image description here](https://i.stack.imgur.com/aUSzG.png)
Ошибка:
"Ошибки": ["Запрашиваемый ресурс больше не доступен на
сервер. "]}
потому что коллекция, которую вы хотите запросить, не существует. Если вы выполните последовательно, у вас не будет этой проблемы. Если у вас есть параллельные потребности, просто добавьте блок try-catch или некоторый логический код, чтобы отследить это исключение (например, оценить коллекцию, если она существует).