Esempio n. 1
0
    private List<String> select(
        DbDialect dbDialect,
        String schemaName,
        String tableName,
        TableData keyTableData,
        TableData columnTableData)
        throws InterruptedException {
      String selectSql =
          dbDialect
              .getSqlTemplate()
              .getSelectSql(
                  schemaName, tableName, keyTableData.columnNames, columnTableData.columnNames);
      Exception exception = null;
      for (int i = 0; i < retryTimes; i++) {
        if (Thread.currentThread().isInterrupted()) {
          throw new InterruptedException(); // 退出
        }

        try {
          List<List<String>> result =
              dbDialect
                  .getJdbcTemplate()
                  .query(
                      selectSql,
                      keyTableData.columnValues,
                      keyTableData.columnTypes,
                      new RowDataMapper(columnTableData.columnTypes));
          if (CollectionUtils.isEmpty(result)) {
            logger.warn(
                "the mediaName = {}.{} not has rowdate in db \n {}",
                new Object[] {schemaName, tableName, dumpEventData(eventData, selectSql)});
            return null;
          } else {
            return result.get(0);
          }

        } catch (Exception e) {
          exception = e;
          logger.warn("retry [" + (i + 1) + "] failed", e);
        }
      }

      throw new RuntimeException(
          "db extract failed , data:\n " + dumpEventData(eventData, selectSql), exception);
    }