成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 Spring Boot + EasyExcel 實現百萬級數據導入導出功能開發

開發 前端
在實際開發中,大家需要根據具體的業務需求對數據的處理邏輯進行進一步的優化和完善。同時,還需要考慮異常處理、數據校驗等方面,以確保系統的穩定性和可靠性。

在當今數據驅動的業務環境中,高效地處理大量數據是至關重要的。Spring Boot 作為一種流行的 Java 框架,提供了許多方便的功能來簡化開發過程。EasyExcel 則是一個強大的工具,專門用于處理 Excel 文件。本文將介紹如何結合使用 Spring Boot 和 EasyExcel 來實現百萬級數據的導入導出功能。

EasyExcel 框架及特性介紹

EasyExcel 是一個基于 Java 的 Excel 處理框架,具有以下顯著特性:

  1. 內存優化:能夠高效處理大文件,避免內存溢出問題,尤其在處理百萬級數據時表現出色。
  2. 簡單易用:提供了簡潔直觀的 API,使開發人員可以輕松地進行 Excel 文件的讀取、寫入和處理操作。
  3. 性能卓越:在數據處理速度方面具有優勢,能夠快速完成大規模數據的操作。
  4. 支持多種格式:不僅可以處理常見的 Excel 格式,還能適應不同的需求。

項目創建及依賴配置(pom.xml)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.icoderoad</groupId>
    <artifactId>easyexcel-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>EasyExcel Demo</name>

    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.3.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

項目文件結構:

project-root/
    src/
        main/
            java/
                com/
                    icoderoad/
                        Application.java  // Spring Boot 啟動類
                        controller/ExcelController  // 控制器類
                        service/ExcelService.java  // 服務類
                        config/EasyExcelConfig.java
            resources/
                application.yaml  // 配置文件
                static/index.html  // 靜態資源,如 CSS、JS、圖片等
 
    pom.xml  // Maven 項目配置文件

配置文件(application.yml)

# 在此處可添加您的應用特定配置
easyexcel:
	# 例如,設置最大讀取行數
  max-read-rows: 1000000
  # 大文件處理配置
  large-file:
    # 啟用大文件處理
    enabled: true
    # 內存緩沖區大小(字節)
    buffer-size: 10485760 
    # 每次讀取的行數
    read-rows-per-time: 10000

啟動類 Application.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

配置類 EasyExcelConfig.java

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.event.AnalysisEventListener;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.yaml.snakeyaml.Yaml;

/**
 * EasyExcel 配置類,負責讀取和設置相關配置參數
 */
@Configuration
public class EasyExcelConfig {

    @Value("${excel.read.maxRows}")
    private int maxRows;

    @Value("${excel.read.useDefaultListener}")
    private boolean useDefaultListener;

    @Value("${excel.read.readCacheSize}")
    private int readCacheSize;

    /**
     * 創建 Excel 事件監聽器
     * @return 分析事件監聽器實例
     */
    @Bean
    public AnalysisEventListener excelEventListener() {
        return new ExcelListener();
    }

    /**
     * 創建 EasyExcel 實例
     * @return EasyExcel 實例
     */
    @Bean
    public EasyExcel easyExcel() {
        return new EasyExcel();
    }

    /**
     * 創建并設置 ReadExcelProperties
     * @return ReadExcelProperties 實例
     */
    @Bean
    public ReadExcelProperties readExcelProperties() {
        ReadExcelProperties properties = new ReadExcelProperties();
        properties.setMaxRows(maxRows);
        properties.setUseDefaultListener(useDefaultListener);
        properties.setReadCacheSize(readCacheSize);
        return properties;
    }

}

服務接口定義及實現 ExcelService.java

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig;
import org.springframework.stereotype.Service;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

@Service
public class ExcelService {

    // 示例方法
    public void exportData() {
        // 創建數據列表
        List<List<String>> data = new ArrayList<>();
        for (int i = 0; i < 1000000; i++) {
            List<String> row = new ArrayList<>();
            row.add("Row " + i);
            row.add("Column 1");
            row.add("Column 2");
            data.add(row);
        }

        // 創建輸出流
        OutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream("exported_data.xlsx");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 創建 ExcelWriter
        ExcelWriter excelWriter = EasyExcel.write(outputStream)
            .withTemplate("template.xlsx")
            .build();

        // 創建 WriteSheet
        WriteSheet writeSheet = EasyExcel.writerSheet()
            .sheetName("Sheet1")
            .build();

        // 填充數據
        excelWriter.fill(data, new FillConfig());

        // 關閉 ExcelWriter
        excelWriter.finish();

        // 關閉輸出流
        try {
        if (outputStream!= null) {
            outputStream.close();
        }
    }

    public void importData() {
        EasyExcel.read("imported_data.xlsx", new ExcelListener()).sheet().doRead();
    }

    // 自定義監聽器,用于處理導入的數據
    static class ExcelListener extends AnalysisEventListener {

       private List<List<String>> data = new ArrayList<>();

      @Override
      public void invoke(Object object, AnalysisContext context) {
          if (object instanceof List<?>) {
              List<String> rowData = (List<String>) object;
              data.add(rowData);
          }
      }

      @Override
      public void doAfterAllAnalysed(AnalysisContext context) {
          // 在此處添加導入完成后的其他處理邏輯,例如數據校驗、數據存儲等
          System.out.println("數據導入完成,共 " + data.size() + " 行數據。");
      }
    }
}

控制器類 ExcelController.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ExcelController {

    @Autowired
    private ExcelService excelService;

    @GetMapping("/export")
    public String exportData() {
        excelService.exportData();
        return "數據導出成功";
    }

    @GetMapping("/import")
    public String importData() {
        excelService.importData();
        return "數據導入成功";
    }
}

前端頁面 index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Excel 操作</title>
</head>
<body>
    <h1>Excel 操作</h1>
    <button onclick="exportData()">導出數據</button>
    <button onclick="importData()">導入數據</button>

    <script>
        function exportData() {
            fetch('/export')
             .then(response => response.text())
             .then(data => {
                    alert(data);
                })
             .catch(error => {
                    alert('導出數據失敗: 'rror);
                });
        }

        function importData() {
            fetch('/import')
             .then(response => response.text())
             .then(data => {
                    alert(data);
                })
             .catch(error => {
                    alert('導入數據失敗: 'rror);
                });
        }
    </script>
</body>
</html>

在實際開發中,大家需要根據具體的業務需求對數據的處理邏輯進行進一步的優化和完善。同時,還需要考慮異常處理、數據校驗等方面,以確保系統的穩定性和可靠性。希望本文能夠幫助大家成功實現百萬級數據的導入導出功能,為大家的業務提供有力的支持。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2025-03-03 08:00:00

SpringBootEasyExcel數據導出

2022-08-01 07:02:06

SpringEasyExcel場景

2024-07-31 09:56:20

2023-02-03 08:21:30

excelMySQL

2023-02-25 10:04:21

JavaExcel導出功能

2010-09-01 13:28:15

C#

2024-04-09 13:20:00

Excel數據庫數據

2022-02-08 17:07:54

Spring BooSpring Aop日志記錄

2024-07-26 10:50:51

SpringScrew數據庫

2025-05-09 10:01:06

EasyExcelMySQLMySQL8

2025-03-03 10:30:00

JavaExcelSpringBoot

2012-03-07 14:37:03

JavaJavaMail

2017-12-11 14:50:34

前端Javascript文本朗讀

2024-08-08 08:31:32

SpringNeo4j優化

2010-03-22 09:59:46

SQL Server

2025-03-26 00:35:00

Javaweb開發

2025-04-07 03:00:00

SpringBoot數據庫

2011-04-20 14:28:38

SQL優化

2012-11-05 10:36:40

IBMdw

2011-05-16 14:17:31

MySQL導入導出大量數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美国产一区二区 | 91在线电影 | 美人の美乳で授乳プレイ | 免费v片 | 91在线视频免费观看 | 久久久久久久av麻豆果冻 | 亚洲免费在线观看 | 久久se精品一区精品二区 | 一区二区三区亚洲精品国 | 国产精品乱码一区二三区小蝌蚪 | 欧美午夜一区二区三区免费大片 | 久久精品国产一区二区电影 | 日韩精品在线观看网站 | 欧美视频三区 | 伊人二区 | 日韩免费视频一区二区 | 精品一区二区三区av | 伊人久操 | 91免费高清 | 精品久久久久久久久久久久久久久久久 | 色婷婷久久 | 综合色播 | 免费黄色网址视频 | 91大神新作在线观看 | 日本不卡一区 | 欧美一级大片 | 亚洲一区二区 | 日韩精品| 日日摸夜夜爽人人添av | 欧美一区在线视频 | 欧美精品一 | 欧美一区二区三区大片 | 天天综合网91| 成人免费视频网站在线看 | 国产精品看片 | 不卡的av电影 | 免费看国产精品视频 | 久久精品亚洲精品国产欧美 | 久久天堂 | 亚洲综合在线视频 | 黑人巨大精品欧美一区二区免费 |