簡體   English   中英

使用 Spring 引導獲取大量數據

[英]Fetching large volume of data with Spring Boot

我一直在嘗試使用 SpringBoot 為我的 REST API 獲取數據,當我嘗試獲取所需的數據時,我提出的請求一直超時。 提取請求的預期結果將返回約 50 列和大約 20k 條記錄。 我嘗試將我的查詢限制為 3k 條記錄,並且我的 fetch 請求通過了,但我真的需要在一個 go 中獲取所有記錄。 我有我需要在物化視圖中暫存的所有數據,因此查詢應該沒有任何問題,並且在 SQL 中運行快速 select * plus 將需要大約 10 秒才能返回所有記錄。 關於如何在不超時的情況下度過難關的任何想法?

編輯:通過 Insomnia 測試 API,我沒有收到任何錯誤,但在 5 分鍾后收到“沒有返回響應的正文”消息。

下面的一些代碼:

數據列表控制器.java

@ApiResponses(value = {
    @ApiResponse(code = 401, message = "Unauthenticated session for current user"),
    @ApiResponse(code = 403, message = "Insufficient privileges for current user"),
    @ApiResponse(code = 500, message = "Unhandled system exception")
})
@RestController
@RequestMapping("/api/v1")
public class DataListController {

    private DataSource dataSource;
    DataListService dataListService;

    @Autowired
    public DataListController(
            DataListService dataListService,
            DataSource dataSource
    ) {
        this.dataListService = dataListService;
        this.dataSource = dataSource;
    }

@ApiOperation(
            value = "Fetch All Data"
    )
    @ApiResponses(value = {
        @ApiResponse(code = 200, response = DataListRecord.class, responseContainer = "List", message = "Fetch all records")
    })
    @GetMapping({"/data/list"})
    public HttpEntity<List<Map>> getAllData(HttpServletResponse response) {
        List<Map> result = dataListService.getAllData();
        return ResponseEntity.ok(result);
    }
}

數據列表服務.java

@Service
public class DataListService {

    private DataListDao dataListDao;

    @Autowired
    public DataListService(
            DataListDao dataListDao
    ) {
        this.dataListDao = dataListDao;
    }

    public List<Map> getAllData() {
        return dataListDao.getAllData();
    }
}

數據列表Dao.java

@Mapper
public interface DataListDao {

    public List<Map> getAllData();

}

數據列表道.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="project.repository.DataListDao">

    <select id="getAllData" resultType="map">
        select * from MV_DATA_LIST
    </select>

</mapper>

嘗試設置嵌入式 Tomcat 的超時

將此設置添加到您的 application.properties

server.connection-timeout=1200000

或者在這種情況下,您正在使用 properties.yml

server:
  connection-timeout: 1200000

您可以在 mybatis 配置中增加defaultStatementTimeout以防止調用數據庫超時。 根據文檔,默認值為 25s。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM