【问题标题】:How can I trigger spring batch execution from vuejs如何从 vuejs 触发 spring 批处理执行
【发布时间】:2020-04-01 08:03:59
【问题描述】:

我正在尝试从端点触发弹簧批处理执行。我在后端实现了一项服务。因此,我正在尝试从 Vue 调用该端点。

async trigger(data) {
    let response = await Axios.post('')
    console.log(response.data.message)
}

我在后端的服务返回响应“批量启动”并在后台执行,因为它是异步的,但一旦执行作业就不会返回(我只在控制台中看到状态)。在这种情况下,我如何等待来自 vue 的调用以完成服务执行。我了解一旦执行完成/失败,服务不会发送任何响应。我需要在后端或前端进行任何更改以支持这一点。请让我知道你的想法。

【问题讨论】:

    标签: spring vue.js spring-batch execution


    【解决方案1】:

    就像你说的,后端服务是异步的,这意味着一旦代码执行完毕,它就会移动到下一行。如果没有下一行退出,则该函数存在,脚本关闭,服务器将空响应发送回前端。

    您的选择是:

    1. 实现一个 websocket,在服务完成时广播回来,并改用它。
    2. 使用超时功能来观察服务中指示服务已完成其职责的标志更改,或
    3. 不要使用异步服务

    【讨论】:

    • 我的服务在启动时启动流程并发送响应“作业已启动”并在后台移动以进一步执行,目前服务没有响应,这就是实现方式。所以我无法触摸后端服务
    • 如果您无法触摸后端服务,那么您无法在此处进行任何调整以支持您的请求。
    • 谢谢。我将使用这些选项研究后端
    【解决方案2】:

    如何等待来自 vue 的调用以完成服务执行

    我不建议这样做,因为这项工作可能需要很长时间才能完成,而且您不希望您的网络客户端等待那么长时间才能得到回复。当配置了异步任务执行器时,作业启动器会立即返回一个带有 ID 的作业执行,您可以稍后检查它。

    请查看Running Jobs from within a Web Container 了解更多详细信息和代码示例。

    【讨论】:

      【解决方案3】:

      我的建议是你应该对作业状态进行前端查询,而不是等待作业完成并响应,因为作业可能需要很长时间才能完成。

      您触发作业启动的 API 应返回作业 ID,您可以在 JobExecution 对象中获取作业 ID。调用JobLauncher.run时返回此对象。

      然后,您在后端实现查询 API 以通过作业 ID 获取作业状态。您可以使用 Spring JobExplorer 来实现这一点。

      然后您的前端可以调用此查询 API 来获取作业状态。您应该以一定的时间间隔执行此操作(例如 30 秒、5 分钟等,具体取决于您的工作)。这将防止您的应用陷入等待作业和超时错误。

      【讨论】:

        猜你喜欢
        • 2014-09-12
        • 1970-01-01
        • 2021-12-15
        • 2012-03-29
        • 1970-01-01
        • 2014-09-07
        • 2020-05-20
        • 2016-09-05
        • 1970-01-01
        相关资源
        最近更新 更多