账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    如何实现前端请求耗时的java后台任务,而不会超时?
    44
    0

    业务需要前端有个按钮,点击后提交到后台,执行一个耗时的后台任务,大约耗时几分钟到几十分钟,并且前端需要知道任务执行结果(成功,失败,执行中)。

    如果用普通ajax请求,由于耗时过长,页面会超时。
    如果自行实现一个提交请求-轮询执行状态-前端实时展示,的功能,会比较复杂,感觉也不可靠。

    请问有没有什么现成的插件或者功能可以实现吗?如果自行实现怎么做比较简单可靠?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 在Java后台任务中,如果要实现前端请求耗时的处理,可以使用Java的内置线程和异步编程特性。以下是一个简单的示例:

      1. 创建一个ExecutorService来执行异步任务。ExecutorService是一个线程池,可以在后台线程中执行任务。在Java 8及更高版本中,可以使用ExecutorServicesubmit方法来提交任务:

      java ExecutorService executorService = Executors.newFixedThreadPool(10); Future<String> future = executorService.submit(new Task());

      在上述代码中,Task类是一个耗时任务,它在submit方法中被提交到后台线程中执行。任务将耗时10秒,并且返回一个Future对象,你可以使用这个对象来获取任务完成的结果。

      1. 在前端页面中,使用JavaScript和jQuery的$.when方法来等待任务完成。以下是一个示例:

      javascript $(document).ready(function() { $.when( $.ajax({ url: 'https://example.com/api/data', method: 'GET', timeout: 10000 // 这里设置任务耗时10秒 }), $.ajax({ url: 'https://example.com/api/data2', method: 'GET', timeout: 10000 // 这里设置任务耗时10秒 }) ).then(function(result1, result2) { // 处理任务完成的结果 console.log('Task 1: ' + result1); console.log('Task 2: ' + result2); }).catch(function(error) { // 处理任务失败 console.error('Error:', error); }); });

      在上述代码中,$.ajax方法用于发送GET请求到后台API。timeout参数设置任务的超时时间,如果超时未完成,$.when方法将自动取消当前请求并返回一个新的Promise对象,该对象将执行异步任务。

      1. 使用Promise的thencatch方法来处理任务完成和失败的结果。在then方法中,你可以处理任务完成的结果,如获取到数据或返回给前端页面。在catch方法中,你可以处理任务失败的情况,如发送请求失败或后台API返回错误信息。

      这样,前端请求耗时的Java后台任务就可以通过Java的异步编程特性来实现,而不会超时。但是需要注意的是,异步编程可能会影响页面的性能,因为$.when方法会阻塞主线程直到任务完成或失败。在实际应用中,需要根据具体情况选择是否使用异步编程,或者通过优化请求结构、使用耗时任务等方法来提高页面性能。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部