在springboot中,一次获取数百万行的最佳方法是什么?

frebpwbc  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(379)

我有一个springboot应用程序,对于一个特定的特性,我必须每天准备一个csv以供另一个服务使用。这项工作每天早上6点开始。并将csv转储到服务器上。问题是数据列表很大。大约有780万行。我正在使用springjpa来获取所有记录。他们有没有更好的方法来提高效率?这是我的密码。。。。

@Scheduled(cron = "0 1 6 * * ?")
public void saveMasterChildList() {

    log.debug("running write job");
    DateFormat dateFormatter = new SimpleDateFormat("dd_MM_yy");
    String currentDateTime = dateFormatter.format(new Date());

    String fileName = currentDateTime + "_Master_Child.csv";
    ICsvBeanWriter beanWriter = null;
    List<MasterChild> masterChildren = masterChildRepository.findByMsisdnIsNotNull();
    try {
        beanWriter = new CsvBeanWriter(new FileWriter(new File("/u01/edw_bill/", fileName)),
            CsvPreference.STANDARD_PREFERENCE);
        String[] header = {"msisdn"};
        String[] nameMapping = {"msisdn"};
        beanWriter.writeHeader(header);
        for (MasterChild masterChild : masterChildren) {
            beanWriter.write(masterChild, nameMapping);
        }
    } catch ( IOException e) {
        log.debug("Error writing the CSV file {}", e.toString());
    } finally {
        if (beanWriter != null) {
            try {
                beanWriter.close();
            } catch (IOException e) {
                log.debug("Error closing the writer {}", e.toString());
            }
        }
    }

} here
ee7vknir

ee7vknir1#

您可以使用分页来分离数据并逐块加载。看看这个。

相关问题