V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ys0316lover
V2EX  ›  程序员

菜鸡请教一个问题

  •  
  •   ys0316lover · 2023-08-18 08:21:56 +08:00 via iPhone · 1649 次点击
    这是一个创建于 497 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有一个业务需要导出表内所有生效的数据,并且需要实时返给前端导出进度,库在 drds 下,该如何实现?
    4 条回复    2023-08-18 10:37:48 +08:00
    lsk569937453
        1
    lsk569937453  
       2023-08-18 08:36:22 +08:00
    我理解的"导出"是指通过文件的方式下载到本地。后端将数据写入 inputstream 中,然后以"application/octet-stream"返回给前端就行了。

    直接百度搜索"springboot+axios 下载进度"
    KOMA1NIUJUNSHENG
        2
    KOMA1NIUJUNSHENG  
       2023-08-18 09:05:34 +08:00
    这不是百度都能搜到的答案吗
    liuhailiang
        3
    liuhailiang  
       2023-08-18 09:51:48 +08:00
    三个接口
    1 、创建导出任务接口:接口立即返回 jobid ,同时开启线程执行导出追加写入文件,线程内执行逻辑先计算总行数,按数量定期更新已导出行数以便能算出导出进度,
    2 、查询导出进度接口:前端通过接口 1 得到 jobid 后,轮训此接口,内部查询 job 的导出进度(已导出行数/总行数)
    3 、下载 job 文件接口:通过接口 2 轮训结果为完成时,通过此接口下载文件

    大体逻辑如上,过程中增加一些安全性、健壮性校验,比如如果表数据会随时增加,那导出时的最大 id 要记录;比如同一人多次点击导出的重复性(进行中任务)校验;比如多人同时导出是否可共用同一个 job ,防止大量导出任务搞挂程序;再比如,2 和 3 和可合并成一个接口,2 为 100%时候,附带下载链接;在比如下载的文件增加一些截止时间什么的好让用户知道下载到的文件截止时间;再比如,提供增量下载巴拉巴拉的节约服务器开销
    dode
        4
    dode  
       2023-08-18 10:37:48 +08:00
    jdbc 逐行处理,获取当前已经处理数量,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2621 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:23 · PVG 08:23 · LAX 16:23 · JFK 19:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.