java - 从 SQL Server 抓取数据到 Elasticsearch 会产生 Java REST API - 504 Gateway Time-out
问题描述
在这里,当我大部分时间运行服务时,我使用 java 连接器 REST API (Spring boot) 将数据从 SQL Server 抓取到 Elasticsearch,最终出现超时异常错误。我在下面给出了我的示例代码以供参考。
@PostMapping("elasticsearch")
public String getdatafromelasticsearch() {
String finalResponse = "";
LOGGER.info("Sync service to get data from Elasticsearch starts - " + new Date());
try {
List<String> odsData= new ArrayList<String>();
odsData= GetSqlresultset();
SimpleDateFormat sm = new SimpleDateFormat(ConstantsHelper.DATE_FORMAT);
String strDate = sm.format(new Date());
GetIndexRequest getRequest = new GetIndexRequest(ConstantsHelper.INDEX_NAME + strDate);
LOGGER.info("Searching index name - " + ConstantsHelper.INDEX_NAME + strDate);
boolean exists = client.indices().exists(getRequest, RequestOptions.DEFAULT);
LOGGER.info("Index exists" + exists);
if (exists) {
DeleteIndexRequest request = new DeleteIndexRequest(ConstantsHelper.INDEX_NAME + strDate);
AcknowledgedResponse deleteIndexResponse = client.indices().delete(request, RequestOptions.DEFAULT);
LOGGER.info("DeleteIndexResponse -" + deleteIndexResponse);
}
for (int i = 0; i < odsData.size(); i++) {
IndexRequest request = new IndexRequest(ConstantsHelper.INDEX_NAME + strDate);
request.id();
String jsonString = odsData.get(i).toString();
request.source(jsonString, XContentType.JSON);
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
}
finalResponse = ConstantsHelper.SUCCESS_MSG;
finalResponse = Integer.toString(odsData.size());
} catch (Exception ex) {
LOGGER.error(ex.getMessage());
finalResponse = ex.getMessage();
} finally {
LOGGER.info("Final response -" + finalResponse);
LOGGER.info("Sync service to get Elasticsearch ends - " + new Date());
}
return finalResponse;
}
public List<String> GetSqlresultset() throws Exception {
LOGGER.info("Inside getsqlresultset method start");
ResultSet resultSet = null;
List<String> sd = new ArrayList<String>();
String connectionUrl = jdbcUri + databaseName + dbUser + dbPwd;
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
try (Connection connection = DriverManager.getConnection(connectionUrl);
Statement statement = connection.createStatement();) {
String selectSql = "";
// Create and execute a SELECT SQL statement.
selectSql = ConstantsHelper.SELECT_STATEMENT;
resultSet = statement.executeQuery(selectSql);
while (resultSet.next()) {
ResultSetMetaData rsmd = resultSet.getMetaData();
int numColumns = rsmd.getColumnCount();
JSONObject obj = new JSONObject();
for (int i = 1; i <= numColumns; i++) {
String column_name = rsmd.getColumnName(i);
obj.put(column_name, resultSet.getObject(column_name));
}
sd.add(obj.toString());
}
// connection.close();
}
LOGGER.info("Inside getsqlresultset method End");
return sd;
}
错误
<html>
<head>
<title>504 Gateway Time-out</title>
</head>
<body bgcolor="white">
<center>
<h1>504 Gateway Time-out</h1>
</center>
</body>
</html>
方法 GetSqlresultset() 用于连接到 SQL server 我无法找到为什么我得到超时异常这是由于 SQLserver 或将记录一一索引到 Elasticsearch 中。
注意:我的 java 服务运行超过 10 分钟。
解决方案
最后我发现是因为我的tomcat的问题。在我的 tomcat 中,默认超时为 60 秒,一旦我们将其增加到 2 分钟,我就会得到预期的响应。
推荐阅读
- reactjs - React Route 使用渲染时如何有区分大小写的路径?
- python - 在python中使用```import re```查找关键字后面的单词
- python - 替换 Pandas 中两个 DataFrame 之间的文本
- .htaccess - .htaccess 重写规则将所有页面从一个域重定向到另一个域,除了一个特定的 URL?
- javascript - 刷新页面时,Chrome 控制台不会继续处理代码
- powershell - 在大量文件中查找重复项的最佳加密哈希函数是什么
- c++ - std::is_union 实现如何工作?
- git - BFG 复制了我之前的提交以及“干净”的提交
- python - 在 Cloudera 上与 Livy 的 SparkMagic PySpark3 会话
- firefox - 使用代理时的 SSL_ERROR_BAD_CERT_DOMAIN