package com.vcarecity.cvs.starter; import com.vcarecity.cvs.factory.ResultHandlerFactory; import com.vcarecity.cvs.service.ResultHandlerService; import com.vcarecity.cvs.service.SQLQueryService; import com.vcarecity.cvs.service.impl.CSVResultHandlerServiceImpl; import lombok.extern.slf4j.Slf4j; import javax.inject.Inject; import java.util.List; /** * @author Kerry on 19/11/20 */ @Slf4j public class SQLStarter { private static final int PAGE_COUNT = 10000; private int pageCount = PAGE_COUNT; private final SQLQueryService queryService; private final ResultHandlerFactory resultHandlerFactory; @Inject public SQLStarter(SQLQueryService queryService, ResultHandlerFactory resultHandlerFactory) { this.queryService = queryService; this.resultHandlerFactory = resultHandlerFactory; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } /** * 导出数据 * * @param table * @param properties * @throws Exception */ public void exportData(String table, String properties, Class cls) throws Exception { if (cls == null) { //noinspection unchecked cls = (Class) Object.class; } ResultHandlerService resultHandler = resultHandlerFactory.createResultHandler(properties); logger.info("start query database table = {}, file = {}, class = {}", table, properties, cls); long startTime = System.currentTimeMillis(); int currentSize; int page = 1; do { List result = queryService.queryByPage(table, page, this.pageCount, cls); resultHandler.resultHandler(result); currentSize = result.size(); page++; } while (currentSize == this.pageCount); if (resultHandler instanceof CSVResultHandlerServiceImpl) { ((CSVResultHandlerServiceImpl) resultHandler).close(); } logger.info("stop query database...{} /ms.", (System.currentTimeMillis() - startTime)); } }