在使用 tomcat 的 java web 应用程序(servlets/spring mvc)中,是否可以运行 cron 作业类型服务?
例如,每 15 分钟清除一次日志数据库。
您可以以独立于容器的方式执行此操作,还是必须使用 tomcat 或其他容器运行?
请指定该方法是保证在特定时间运行还是每 15 分钟运行一次,但如果应用程序回收,则可能会被重置等(如果您使用计时器,这就是 .net 中的情况)
在使用 tomcat 的 java web 应用程序(servlets/spring mvc)中,是否可以运行 cron 作业类型服务?
例如,每 15 分钟清除一次日志数据库。
您可以以独立于容器的方式执行此操作,还是必须使用 tomcat 或其他容器运行?
请指定该方法是保证在特定时间运行还是每 15 分钟运行一次,但如果应用程序回收,则可能会被重置等(如果您使用计时器,这就是 .net 中的情况)
如第 23 章中所述,调度和线程池,Spring 通过集成类Timer
和 Quartz 调度器 ( http://www.quartz-scheduler.org/ ) 提供调度支持。对于简单的需求,我建议使用 JDK Timer
。
请注意,Java 调度程序通常用于触发 Java面向业务的作业。对于系统管理任务(如您提供的示例),您应该更喜欢 cron 和传统的管理工具(bash 等)。
如果您使用的是 Spring,则可以使用内置的 Quartz 或 Timer 挂钩。见http://static.springsource.org/spring/docs/2.5.x/reference/scheduling.html
它将是特定于容器的。您可以使用Quartz在 Java 中执行此操作,或者仅使用 Java 的调度并发 utils ( ScheduledExecutorService
) 或作为操作系统级别的 cron 作业。
每15分钟似乎很极端。一般来说,我还建议您只截断/删除不再写入的日志文件(并且它们通常在一夜之间滚动)。
作业是面向批处理的。通过手动触发或 cron 样式(如您所愿)。
我还是不明白你在 webapp 和 cron 式工作之间的关系吗?我能想到的唯一 webapp 用例是,您希望有一个 HTTP 端点来触发作业(但这与您关于“cron 风格”的说法相反)。
通常使用专门的框架来解决问题领域的“批处理作业”。我可以推荐石英。