我有一个基于 jsp/servlet 的网络应用程序。
我有一个“清理”按钮,它调用一个 servlet,请求一直持续到 DAO 类。DAO 类执行不同的数据库活动,例如将数据从主表移动到备份表,然后从主表中删除数据等。
截至目前,此活动是同步的,用户需要等到发送响应。
我想实现与异步任务相同的场景,用户只收到一条消息“触发清理活动”
执行此任务的最佳/最简单方法是什么。我不能使用调度程序。
我的容器是 TomCat。
我有一个基于 jsp/servlet 的网络应用程序。
我有一个“清理”按钮,它调用一个 servlet,请求一直持续到 DAO 类。DAO 类执行不同的数据库活动,例如将数据从主表移动到备份表,然后从主表中删除数据等。
截至目前,此活动是同步的,用户需要等到发送响应。
我想实现与异步任务相同的场景,用户只收到一条消息“触发清理活动”
执行此任务的最佳/最简单方法是什么。我不能使用调度程序。
我的容器是 TomCat。
ExecutorService
是最稳健的解决方案。创建一个简单的线程也足够了。然而,更大的问题是同步。用于Semaphore
控制两个用户是否不同时进行清理。
最简单但不同的解决方案可能是在客户端使用一些 AJAX 行为。有很多简单/强大的框架(JS 文件)可以帮助您在页面中实现 AJAX。使用 AJAX,您只需异步提交请求并在服务器端处理请求时显示客户端消息“已触发清理活动”。如果用户等待,服务器进程将返回并显示“成功”消息,否则用户可以自由浏览其他页面或执行其他操作。
我们为我们的项目做过一次,效果很好。
只要处理请求没有问题,我们就会向用户发送 200 ok。我们使用 java executorservice 来进行清理。
如果出现问题,请单独通知用户。