java - 如何以指定的时间间隔自动定期调用 servlet

标签 java api jsp servlets timer

必须定期调用servlet。(就像andorid中的服务概念)

如何做到这一点。使用计时器或任何其他解决方案?

提前致谢。

最佳答案

扩展 JB Nizet 的评论...

formerly accepted answer有点像黑客。如果目标是让一些常规任务作为 Web 应用程序的一部分执行,Java 提供了一套灵活的技术来实现这一目标。

ServletContextListener

第一个是 Servlet 规范定义的 Hook ,用于在部署 Web 应用程序和关闭 Web 应用程序时调用代码。这个钩子(Hook)是ServletContextListener .

ScheduledExecutorService

第二部分是添加到最新版本的 Java 中的执行器服务,作为旧 Timer 类的更复杂的替代品。特别是您需要ScheduledExecutorService .

因此,当您的 Web 应用程序启动时,ServletContextListener 会启动 ScheduledExecutorService。当 ServletContextListener 收到关闭通知时,它会告诉执行器正常退出。

一个技巧:确保捕获执行器中的所有异常。如果异常泄漏,执行器会默默地停止执行。这是一个功能而不是一个错误。阅读文档并通过谷歌搜索进行学习。

Jakarta 并发

一些Servlet容器支持Jakarta Concurrency 。该规范提供了上面讨论的执行器服务的自动管理。

关于java - 如何以指定的时间间隔自动定期调用 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26436769/

相关文章:

java - 如何在 Mac 上安装替代 JDK 而不覆盖当前版本

javascript - NativeScript http.getJSON 和异步等待

c# - 将 REST API 转换为 websocket 客户端

java - 如何将对象从 Spring 3.0 Controller 传递到 JSP View 并使用 JSTL 进行测试

java - 如何在 Android 中将 exif 数据写入图像?

java - 默认构造函数无法处理隐式 super 构造函数抛出的异常类型 IOException。必须定义显式构造函数

api - 设置未知属性:yii\web\UrlRule::GET

java - Spring-MVC:JSP <form action> View 将一系列值发送到 Controller ,而不是单击按钮的一个值

jsp - JSTL中的 "if elseif elseif"的等效项

java - 无法在 "/usr/bin/java/bin/java"(-1) 找到可执行文件; bash_profile 编辑没有修复