在java servlet应用程序中执行异步数据库任务

时间:2012-10-22 18:43:14

标签: java multithreading servlets asynchronous

我有一个基于jsp / servlet的网络应用程序。

我有一个按钮“清理”,它调用一个servlet,请求一直到DAO class.DAO类执行不同的数据库活动,比如将数据从主表移动到备份表,然后删除数据来自主表等。

截至目前,此活动是同步的,用户需要等到发送响应。

我想实现与Asynch任务相同的场景,用户只是收到消息 “触发清理活动”

执行此任务的最佳/最简单方法是什么?我不能使用调度程序。

我的容器是TomCat。

3 个答案:

答案 0 :(得分:2)

ExecutorService是最强大的解决方案。创建一个简单的线程也足够了。然而,更大的问题是同步。使用Semaphore来控制是否有两个用户没有同时清理。

答案 1 :(得分:2)

最简单但不同的解决方案可能是在客户端使用某些AJAX行为。有很多简单/强大的框架(JS文件)可以帮助您在页面中实现AJAX。使用AJAX,您只需异步提交请求并显示客户端消息“清除已触发的活动”,同时在服务器端处理请求。如果用户等待,服务器进程将返回并显示“成功”消息,否则用户可以自由导航其他页面或执行其他操作。

答案 2 :(得分:0)

我们曾为我们的项目做过一次这样做,效果很好。

只要处理请求没有问题,我们就会向用户发送200 ok。我们使用java executorservice来进行清理。

如果出现问题,请单独通知用户。