【发布时间】:2014-07-11 20:35:53
【问题描述】:
如果我想每分钟更新一次缓存,或者每小时做一些其他事情,我应该把我的代码 (Java) 放在哪里?正如我所想,不在servlet中。你能帮我吗?
【问题讨论】:
标签: java google-app-engine servlets
如果我想每分钟更新一次缓存,或者每小时做一些其他事情,我应该把我的代码 (Java) 放在哪里?正如我所想,不在servlet中。你能帮我吗?
【问题讨论】:
标签: java google-app-engine servlets
【讨论】:
Andrei Volgin 的回答是正确的,你需要追查链接。
但是,我想解决您问题中的“不在 servlet 中”部分。我认为您是从设计角度询问代码是否应该驻留在 servlet 类中。我最近为自己回答了这个问题。
GAE 实现 Cron 和 Tasks 的方式,代码将通过 servlet 调用,因为这些是后台 URL 调用。因此,理论上,代码可以在 servlet 类本身中。如果您使用像 Spring 这样的框架,您可能会有一个入口点 servlet 和您自己的处理程序/管理器/服务。在这种情况下,您可以在处理程序中编写代码。
在我的项目中,我为所有与 UI 相关的处理创建了一个入口点 servlet。当我需要实现第一个任务队列时,我为队列/crons 创建了另一个入口点 servlet,然后在新的处理程序中进行编码。
一般来说,您的应用设计看起来类似于 UI ---> Servlet 入口点 1 ---> 通用业务逻辑处理程序 ---> 特定业务逻辑处理程序 --> 系统服务处理程序 ---> 系统服务
现在我们有 Queues/Crons 调用系统而不是 UI,但一般来说,就像我的情况一样,cron 调用的代码更“内部”,例如,发送邮件被实现为排队任务需要绕过两个业务逻辑层直接调用System Service Handler。同样,ftp-today's-transactions 是一个需要绕过业务逻辑层直接调用系统服务的 cron。
不直接从 servlet 入口点 1 调用系统服务是有意义的,因为您碰巧有它并在 web.xml 中进行了配置。为更“内部”的队列和 crons 创建另一个入口点更有意义。 然后代码驻留在下一级类(有时称为处理程序)中,如果您使用包来执行它,您可以继续维护层的层次结构。
然后,您不会对直接从 servlet 级别调用某些 sys 级别的东西感到难过,因为这将是一个特别安全且独立的访问接口定义,可以直接调用。
为了更直观,我的两个servlet被称为
Thin 只是确保存在所需的参数并传递给处理程序。它总是调用 com.mybusiness 类,如果需要,它们又会调用 com.mysystem 类。
Thiq 有更多代码,即使在自动模式下也需要安全凭证,进行更复杂的验证,并且通常为跨 crons/任务的故障定义了高级行为。它总是调用 com.mysystem 类。
只有我的两分钱。这不是什么大不了的事情,如果你只保留一个入口点并通过在处理程序甚至 servlet 中编写东西来达到相同的效果,它不会导致世界末日。当您制作架构图时,它看起来很丑。
【讨论】: