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