SQLStarter.java 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package com.vcarecity.cvs.starter;
  2. import com.vcarecity.cvs.factory.ResultHandlerFactory;
  3. import com.vcarecity.cvs.service.ResultHandlerService;
  4. import com.vcarecity.cvs.service.SQLQueryService;
  5. import com.vcarecity.cvs.service.impl.CSVResultHandlerServiceImpl;
  6. import lombok.extern.slf4j.Slf4j;
  7. import javax.inject.Inject;
  8. import java.util.List;
  9. /**
  10. * @author Kerry on 19/11/20
  11. */
  12. @Slf4j
  13. public class SQLStarter {
  14. private static final int PAGE_COUNT = 10000;
  15. private int pageCount = PAGE_COUNT;
  16. private final SQLQueryService queryService;
  17. private final ResultHandlerFactory resultHandlerFactory;
  18. @Inject
  19. public SQLStarter(SQLQueryService queryService,
  20. ResultHandlerFactory resultHandlerFactory) {
  21. this.queryService = queryService;
  22. this.resultHandlerFactory = resultHandlerFactory;
  23. }
  24. public void setPageCount(int pageCount) {
  25. this.pageCount = pageCount;
  26. }
  27. /**
  28. * 导出数据
  29. *
  30. * @param table
  31. * @param properties
  32. * @throws Exception
  33. */
  34. public <T> void exportData(String table, String properties, Class<T> cls) throws Exception {
  35. if (cls == null) {
  36. //noinspection unchecked
  37. cls = (Class<T>) Object.class;
  38. }
  39. ResultHandlerService resultHandler = resultHandlerFactory.createResultHandler(properties);
  40. logger.info("start query database table = {}, file = {}, class = {}", table, properties, cls);
  41. long startTime = System.currentTimeMillis();
  42. int currentSize;
  43. int page = 1;
  44. do {
  45. List<T> result = queryService.queryByPage(table, page, this.pageCount, cls);
  46. resultHandler.resultHandler(result);
  47. currentSize = result.size();
  48. page++;
  49. } while (currentSize == this.pageCount);
  50. if (resultHandler instanceof CSVResultHandlerServiceImpl) {
  51. ((CSVResultHandlerServiceImpl) resultHandler).close();
  52. }
  53. logger.info("stop query database...{} /ms.", (System.currentTimeMillis() - startTime));
  54. }
  55. }