从Java代码连接到Azure Cosmos DB时发生未知后异常
我创建了一个简单的从Java代码连接到Azure Cosmos DB时发生未知后异常,java,azure,azure-cosmosdb,Java,Azure,Azure Cosmosdb,我创建了一个简单的Java项目。并将JARs添加到classpath。在文件BulkImport.java中,我正在尝试连接到Azure Cosmos DB。但是,我遇到了以下错误 警告:[main]警告 com.microsoft.azure.documentdb.GlobalEndpointManager-未能 检索数据库帐户信息。 com.microsoft.azure.documentdb.DocumentClientException: java.net.UnknownHostExce
Java
项目。并将JARs
添加到classpath
。在文件BulkImport.java中,我正在尝试连接到Azure Cosmos DB
。但是,我遇到了以下错误
警告:[main]警告
com.microsoft.azure.documentdb.GlobalEndpointManager-未能
检索数据库帐户信息。
com.microsoft.azure.documentdb.DocumentClientException:
java.net.UnknownHostException:这通常是一个临时错误
主机名解析期间,表示本地服务器没有
从权威服务器接收响应
BulkImport.java
public class BulkImport {
//public static final Logger LOGGER = LoggerFactory.getLogger(BulkImport.class);
public static final String ENDPOINT = "https://<xxxx>.documents.azure.com:443/";
public static final String PRIMARY_KEY = xxxx
public static final String DATABASE = "xxxx"
public static final String CONTAINER = "xxxx";
public static final String PARTITION_KEY = "/id";
public static final int THROUGHPUT = 10000;
public static void main(String args[]) throws Exception {
executeBulkImport();
System.out.print("Done");
}
public static void executeBulkImport() throws Exception
{
ConnectionPolicy connectionPolicy = new ConnectionPolicy();
connectionPolicy.setMaxPoolSize(1000);
// Below line is giving the error
DocumentClient client = new DocumentClient(ENDPOINT, PRIMARY_KEY, connectionPolicy, ConsistencyLevel.Session);
DocumentCollection collection = Utilities.createEmptyCollectionIfNotExists(client, DATABASE, CONTAINER, PARTITION_KEY, THROUGHPUT);
ArrayList<String> list = new ArrayList<String>();
JSONParser jsonParser = new JSONParser();
try (FileReader reader = new FileReader("C:\\samplejson.json")) {
Object obj = jsonParser.parse(reader);
JSONArray jsonArray = (JSONArray) obj;
System.out.println(jsonArray);
if (jsonArray != null) {
int len = jsonArray.size();
for (int i=0;i<len;i++){
list.add(jsonArray.get(i).toString());
}
}
System.out.println(list.get(0));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
client.getConnectionPolicy().getRetryOptions().setMaxRetryWaitTimeInSeconds(30);
client.getConnectionPolicy().getRetryOptions().setMaxRetryAttemptsOnThrottledRequests(9);
// Builder pattern
DocumentBulkExecutor.Builder bulkExecutorBuilder = DocumentBulkExecutor.builder().from(client, DATABASE, CONTAINER,
collection.getPartitionKey(), 20000);
try {
DocumentBulkExecutor bulkExecutor = bulkExecutorBuilder.build();
client.getConnectionPolicy().getRetryOptions().setMaxRetryWaitTimeInSeconds(0);
client.getConnectionPolicy().getRetryOptions().setMaxRetryAttemptsOnThrottledRequests(0);
BulkImportResponse bulkImportResponse = bulkExecutor.importAll(list, false, false, null);
System.out.println(bulkImportResponse.getNumberOfDocumentsImported());
} catch (Exception e) {
e.printStackTrace();
}
client.close();
}
}
公共类导入{
//公共静态最终记录器Logger=LoggerFactory.getLogger(BulkImport.class);
公共静态最终字符串终结点=”https://.documents.azure.com:443/";
公共静态最终字符串主键=xxxx
公共静态最终字符串数据库=“xxxx”
公共静态最终字符串CONTAINER=“xxxx”;
公共静态最终字符串分区_KEY=“/id”;
公共静态最终整数吞吐量=10000;
公共静态void main(字符串args[])引发异常{
executeBulkImport();
系统输出打印(“完成”);
}
public static void executeBulkImport()引发异常
{
ConnectionPolicy ConnectionPolicy=新的ConnectionPolicy();
connectionPolicy.setMaxPoolSize(1000);
//下面的行给出了错误
DocumentClient client=新的DocumentClient(端点、主键、连接策略、一致性级别会话);
DocumentCollection collection=Utilities.createEmptyCollectionIfNotExists(客户端、数据库、容器、分区密钥、吞吐量);
ArrayList=新建ArrayList();
JSONParser JSONParser=新的JSONParser();
试试看(FileReader=newfilereader(“C:\\samplejson.json”)){
objectobj=jsonParser.parse(reader);
JSONArray JSONArray=(JSONArray)obj;
System.out.println(jsonArray);
if(jsonArray!=null){
int len=jsonArray.size();
对于(int i=0;i我遇到了类似的问题,因为我试图从on-prem环境进行连接。设置代理有助于:
ConnectionPolicy defaultPolicy = ConnectionPolicy.GetDefault();
HttpHost proxy = HttpHost.create("your-proxy-host:8080");
defaultPolicy.setProxy(proxy);
defaultPolicy.setConnectionMode(ConnectionMode.Gateway);
此代码适用于:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-documentdb</artifactId>
<version>2.4.7</version>
</dependency>
com.microsoft.azure
azure文档数据库
2.4.7
如果你有其他版本的azure java sdk,你需要找到类似的解决方案来设置你的代理。显然java无法解析主机名。你尝试过其他方法吗?比如dig.documents.azure.com
?你可能需要通过代理吗?在公司环境中经常会遇到这种情况。我如何使用dig?还有,是的ht关于代理。但是我尝试了使用/不使用代理,结果是相同的。dig检查您是否可以手动解析连接到的地址。我在windows上,所以我执行了nslookup
。它正在返回IP地址!到目前为止,我刚刚更改了环境。我正在从虚拟机以及eclipse版本进行尝试是Neon,而我切换到了其他版本。但是,如果我切换回以前的环境,这可能会有所帮助。将检查,谢谢!