Сканирование данных с SQL server на Elasticsearch приводит к тайм-ауту Java REST API — 504 Gateway

#java #spring-boot #mssql-jdbc #timeoutexception #elasticsearch-java-api

#java #весенняя загрузка #mssql-jdbc #исключение timeoutexception #elasticsearch-java-api

Вопрос:

Здесь я использую java connector 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 минут.

Ответ №1:

Наконец, я обнаружил, в чем проблема, из-за моего кота. В моем tomcat тайм-аут по умолчанию составляет 60 секунд, как только мы увеличили его до 2 минут, я получаю ответ, как и ожидалось.