我有一个任务要包装在servlet中,以便能够通过http请求远程运行任务。
我知道我可以使用REST API来实现这一点,但是现在我假设(如果我错了请纠正我)一个简单的servlet会做。
我想要实现的一件事是,如果在处理另一个请求的同时向servlet发出请求,我将得到一个适当的响应 - “任务已在运行”。
我使用servlet-3.0构建了一个简单的servlet,它调用我想要运行的jar,但是当我发出2个请求时,第二个请求在第一个请求完成之前不会被处理。
编辑:
我的servlet是一个简单的http serlvet。服务方法覆盖。 我在开始时有一个system.out.println(“a”)。 当我在调试模式下调用servlet然后(在断点处停止时)再次调用它时,消息只打印一次并在我释放断点并第一次运行完成时第二次打印。
答案 0 :(得分:0)
首先,这似乎不像REST。如果您真的只想生成(单个)后台任务,请确保在单独的工作线程中执行,而不是请求线程。
答案 1 :(得分:0)
也许你需要一把锁:
public class Task extends HttpServlet {
// for singleton
//private volatile boolean running = false;
// or try this:
public static boolean running = false;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
if(running){
PrintWriter out = response.getWriter();
out.println("running");
return;
}
synchronized(Task.class){
if(!running){
running = true;
// run the task
running = false;
}
}
}
}