24

在使用 tomcat 的 java web 应用程序(servlets/spring mvc)中,是否可以运行 cron 作业类型服务?

例如,每 15 分钟清除一次日志数据库。

您可以以独立于容器的方式执行此操作,还是必须使用 tomcat 或其他容器运行?

请指定该方法是保证在特定时间运行还是每 15 分钟运行一次,但如果应用程序回收,则可能会被重置等(如果您使用计时器,这就是 .net 中的情况)

4

4 回答 4

12

第 23 章中所述,调度和线程池,Spring 通过集成类Timer和 Quartz 调度器 ( http://www.quartz-scheduler.org/ ) 提供调度支持。对于简单的需求,我建议使用 JDK Timer

请注意,Java 调度程序通常用于触发 Java面向业务的作业。对于系统管理任务(如您提供的示例),您应该更喜欢 cron 和传统的管理工具(bash 等)。

于 2010-01-11T01:16:56.780 回答
2

如果您使用的是 Spring,则可以使用内置的 Quartz 或 Timer 挂钩。见http://static.springsource.org/spring/docs/2.5.x/reference/scheduling.html

于 2010-01-11T01:00:57.660 回答
0

它将是特定于容器的。您可以使用Quartz在 Java 中执行此操作,或者仅使用 Java 的调度并发 utils ( ScheduledExecutorService) 或作为操作系统级别的 cron 作业。

每15分钟似乎很极端。一般来说,我还建议您只截断/删除不再写入的日志文件(并且它们通常在一夜之间滚动)。

于 2010-01-11T01:02:05.477 回答
0

作业是面向批处理的。通过手动触发或 cron 样式(如您所愿)。

我还是不明白你在 webapp 和 cron 式工作之间的关系吗?我能想到的唯一 webapp 用例是,您希望有一个 HTTP 端点来触发作业(但这与您关于“cron 风格”的说法相反)。

通常使用专门的框架来解决问题领域的“批处理作业”。我可以推荐石英。

于 2010-01-11T01:16:17.340 回答