gpt4 book ai didi

java - 从另一个 Java Servlet 激活一个 Java Servlet

转载 作者:行者123 更新时间:2023-12-02 08:29:32 25 4
gpt4 key购买 nike

我的问题是这样的:
Google App Engine允许 cron 作业在 DeadlineExceededException 之前仅 Activity 30 秒被抛出。从这个角度来看,我的应用程序不适合谷歌应用程序引擎平台,需要调用耗时的 cron 作业。
我想到的一个解决方案是调用另一个 Servlet (Servlet2) 并让 Servlet2 为我完成工作,Servlet_2 将是一个常规的 Java Servlet。
为了实现这一目标,我正在考虑创建一个 session从我的 cron 作业 Servlet_1 中,调用另一个 Servlet_2,测试 session ,然后让服务器执行所需的作业,最后使 session 无效。
来自 Servlet_1 的调用不应重定向到 Servlet_2,因为这会让我再次回到第一个方向。
现在我的问题是:你认为这行得通吗?如果是,并且出现 DeadlineExceededException acure,即使我将所有代码放入 Servlet_2 的 destroy 方法,Servlet_2 也会停止工作吗?
我的代码:

//Servlet_1
try {
HttpSession session = request.getSession(true);
session.setAttribute("referingPage", "server is calling");
request.getRequestDispatcher("/Servlet_2.do").forward(request, response);
}catch(DeadlineExceededException e) {
e.printStackTrace();
}
<pre>//Servlet_2
@Override
public void destroy() {
HttpSession session = request.getSession(true);
String value = (String)session.getAttribute("referringPage");
if(value.equals("server is calling")) {
// Do the time demanding stuff
}
session.invalidate();
}
</pre>

如能得到答复,将不胜感激!

最佳答案

你只有 30 秒的时间来完成执行,没有办法解决这个问题。执行转发不会产生新线程或任何其他内容,它仍在 30 秒的时间限制内执行。

我会尝试找出某种方法来序列化您正在做的事情,或者暂停它并将您的状态保存在内存缓存中。当您再次开始处理时,请检查内存缓存以查看是否需要从上次中断的位置继续。

Google App Engine 正在处理长时间运行的后台进程,我希望尽快推出解决方案。我在同一条船上。

标记

关于java - 从另一个 Java Servlet 激活一个 Java Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3775982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com