Browse Source

当抽取数据量大于1W时,改成以1W为基准循环抽取

wangxingwang 6 years ago
parent
commit
54037d391c
1 changed files with 44 additions and 7 deletions
  1. 44 7
      src/main/java/com/yihu/quota/service/job/SingleTableJob.java

+ 44 - 7
src/main/java/com/yihu/quota/service/job/SingleTableJob.java

@ -100,9 +100,41 @@ public class SingleTableJob implements Job {
        cleanData();
        List<Map<String, Object>> list;
        list = fetch();
        saveData(list);
        String sql = sqlGenerate();
        String[] countSql = sql.split("from");
        sql = "select count(*) from " + countSql[1];
        try {
            int rows = jdbcTemplate.queryForObject(sql, Integer.class);
            int perCount = 10000;
            if (rows > perCount) {
                int count = rows / perCount;
                int remainder = rows % perCount;
                if (remainder != 0) {
                    count++;
                } else {
                    remainder = perCount;
                }
                for (int i = 0; i < count; i++) {
                    int row,start = 0;
                    if (i != 0) {
                        start = i * perCount;
                    }
                    // 确定抽取多少条数据
                    if (i + 1 == count) {
                        row = remainder;
                    } else {
                        row = perCount;
                    }
                    List<Map<String, Object>> list = fetch(start, row);
                    saveData(list);
                }
            } else {
                List<Map<String, Object>> list = fetch(0, perCount);
                saveData(list);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void prepare(JobExecutionContext jobExecutionContext) {
@ -165,7 +197,14 @@ public class SingleTableJob implements Job {
    }
    private List<Map<String, Object>> fetch() {
    private List<Map<String, Object>> fetch(Integer start, Integer row) {
        String sql = sqlGenerate();
        sql += " limit " + start + "," + row;
        logger.info("sql={}",sql);
        return jdbcTemplate.queryForList(sql);
    }
    public String sqlGenerate() {
        StringBuilder sb = new StringBuilder();
        if (StringUtils.isNotEmpty(searchColumn)) {
            sb.append("select ").append(primeKey).append(",").append(searchColumn).append(" from ").append(database).append(".").append(table);
@ -197,11 +236,9 @@ public class SingleTableJob implements Job {
                return null;
            }
        }
        logger.info("sql={}",sb.toString());
        return jdbcTemplate.queryForList(sb.toString());
        return sb.toString();
    }
    /**
     * TODO:没有设置数据库来源和数据库类型,当前使用默认数据库
     *