微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将数据从SQL Server爬网到Elasticsearch会产生Java REST API-504网关超时

如何解决将数据从SQL Server爬网到Elasticsearch会产生Java REST API-504网关超时

在这里,当我大多数时间在运行服务时,我使用Java连接器REST API(春季启动)将数据从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分钟,我就会得到预期的响应。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。