【问题标题】:Java Quartz job inside a Container容器内的 Java Quartz 作业
【发布时间】:2012-06-29 19:51:20
【问题描述】:

按照 - http://quartz-scheduler.org/documentation/quartz-2.1.x/examples/Example1 中提到的说明成功安排了第一个 java Quartz 作业

由于它是一个独立的应用程序,我们使用 main 方法。我想让它成为一个容器管理的。所以,我按照-http://quartz-scheduler.org/documentation/quartz-2.1.x/cookbook/ServletInitScheduler中的说明添加了代码

但无法在容器环境中在预定时间自动运行作业。我仍然必须使用 main 方法并手动运行作业。

请给我一个解决方案。

这是石英调度程序代码的链接。 https://gist.github.com/60b236e7fd1432c76248

【问题讨论】:

  • servlet 启动是否正常?您的工作存储在哪里?在内存中还是在数据库中?
  • 是的,servlet正在启动,tomcat服务器启动时,进入实现job接口的类的execute方法。作业存储在数据库中,在表 QRTZ_JOB_DETAILS
  • 我在 Apache Tomcat 日志中收到此消息 - 2012 年 6 月 28 日下午 3:52:45 org.apache.catalina.core.ApplicationContext 日志信息:QuartzInitializer:将 Quartz 调度程序工厂存储在关键的 servlet 上下文:org.quartz.impl.StdSchedulerFactory.KEY
  • "及其进入实现作业接口的类的执行方法" -> 那么Web容器正在运行你的作业吗?您可能需要在问题中显示一些代码,即显示您实际上如何能够在这个“主要”方法中启动工作。
  • 为问题中的代码添加了链接。

标签: java quartz-scheduler


【解决方案1】:

我认为您有几个问题需要解决。

  1. 检查石英文档并修改您的 web.xml 以使用侦听器或 servlet 方法。你目前两者都有。

  2. 您需要在 tomcat 中运行另一个 servlet 来创建作业。谷歌了解如何创建一个简单的 servlet 或询问更多信息。您必须获取由quartz init servlet 创建的调度程序工厂——查看quartz init servlet 的javadocs 以了解如何执行此操作。它们使其在 servlet 上下文中可供其他 servlet 获取

【讨论】:

  • 是的!添加了一个实现 ServletContextListener 并初始化 Quartz Scheduler @startup 的 java 类,将作业存储在 Jobstore 中。在 web.xml 中添加。感谢您的所有支持..:)
猜你喜欢
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多