package com.iplatform.gather; import com.walker.store.support.DatabaseStore; /** * 单表数据采集调度器默认实现。后续该对象会废弃,没太大意义,因为通常都不会只采集一个表。 * @author shikeying * @date 2016年2月22日 * */ public abstract class SingleTableGatherScheduler extends GatherScheduler{ private String tableName; private String createTableSql; private String loadSql; private int index = 0; private int pageSize = 64; public SingleTableGatherScheduler(int id, String name, DatabaseStore store){ super(id, name, store); } public void setTableName(String tableName) { this.tableName = tableName; } public void setCreateTableSql(String createTableSql) { this.createTableSql = createTableSql; } public void setLoadSql(String loadSql) { this.loadSql = loadSql; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } @Override protected Object[] getRunParameters(Object previousInvokeResult) { // 从原始表加载数据,这里主要是给出加载的条件。 Object[] params = new Object[2]; String querySql = null; if(this.getInvokeCount() == 0){ logger.debug("第一次执行:getRunParameters"); querySql = this.loadSql + getPageSQLInfo(index, pageSize); params[0] = 0; index += pageSize; } else if(previousInvokeResult != null){ logger.debug("第" + this.getInvokeCount() + "次调用,前一次存在数据"); querySql = this.loadSql + getPageSQLInfo(index, pageSize); params[0] = index; index += pageSize; } else { logger.debug("第" + this.getInvokeCount() + "次调用,前一次未获得数据"); querySql = this.loadSql + getPageSQLInfo(index, pageSize); if(index - pageSize >= 0){ index -= pageSize; params[0] = index; index += pageSize; } else { params[0] = 0; index += pageSize; } } logger.debug("-----> SQL = " + querySql + ", index = " + params[0]); // params[0] = index; params[1] = pageSize; return new Object[]{tableName, createTableSql, null, new Object[]{querySql, params}}; } /** * 子类提供分页查询的SQL代码,如:MySQL = limit ?, ?、ORACLE等 * @param index * @param pageSize * @return */ protected abstract String getPageSQLInfo(int index, int pageSize); }