[英]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.