【问题标题】:using quartz in a web app with spring在带有弹簧的网络应用程序中使用石英
【发布时间】:2009-10-05 14:42:17
【问题描述】:

我创建了一个小型控制台应用程序来查看quartz 的工作原理,并且很容易在main 方法中创建一个applicationcontext 对象来让cron 运行。好的,现在我在一个由 maven 管理的真实项目中,它正在使用某些模块中定义的 cron 作业。每个模块都有自己的 spring 配置文件。我有 3 个使用石英的模块,所以它是在每个 spring 配置文件中设置的。 Web 应用程序模块是每个模块的依赖项。

现在我几乎没有什么顾虑了:

  1. 我应该像在控制台项目中那样创建applicationcontext,还是应该加载它。如果是,我应该在哪里加载它。

  2. 根据我在网上做的研究,我使用MethodInvokingJobDetailFactoryBean 进行简单的单元测试。而且现在要使用CronExpression类来测试getNextValidTimeAfter,还是不知道怎么组织好

谁能帮帮我。我真的很感激。感谢阅读

【问题讨论】:

    标签: java spring maven-2 jakarta-ee quartz-scheduler


    【解决方案1】:

    根据评论,问题更接近“如何为 Web 应用程序加载 Spring 应用程序上下文文件”。

    根据Section 3.8.5, "Convenient ApplicationContext instantiation for web applications",您可以使用ContextLoaderListener 注册ApplicationContext,如下所示(将此添加到您的web.xml 文件中):

    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/daoContext.xml /WEB-INF/applicationContext.xml</param-value>
    </context-param>
    
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <!-- or use the ContextLoaderServlet instead of the above listener
    <servlet>
      <servlet-name>context</servlet-name>
      <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
    </servlet>
    -->
    

    【讨论】:

    • pascal 我真的很感谢你的努力,但我认为你没有理解我。英语不是我的语言。现在我在连接 bean、触发器和 schedulerfactorybean 时没有任何问题因为我已经为我的控制台项目完成了它。我的意思是现在我在一个 Web 应用程序中并且我没有调用 applicationcontext 对象的 java main 方法,我不知道如何在 wep 应用程序环境中进行。我编辑了我正在写的帖子 getNextValidTimeAfter 而不是 getNext。谢谢
    • pascal 我现在开始看到曙光了。一个问题。如果我经过侦听器,我只需要在参数值中写入所有应用程序上下文,对吗?但应用程序上下文在不同的模块,所以在我的情况下,使用 servlet 是合适的。如果我错了,请纠正我。非常感谢你
    • Filter 或 Servlet,在这两种情况下都必须声明 &lt;context-param&gt;,这部分不会改变。然后,为了让 Spring 能够找到应用程序上下文文件,您只需要将它们放在 webapp 的类路径中(即模块需要打包在 WEB-INF/lib 目录中)。但这应该已经是这样了。
    • 非常感谢您的帮助。我发现所有其他 maven 模块 applicationcontext 应该在 web-app /META-INF 中可用,所以我将添加到现有的 webappcontext 中,例如 @ 987654327@。谢谢你对单元测试有任何想法
    • 说实话,我不确定你想要“单元”测试什么。 CronExpression#getNextValidTimeAfter(java.util.Date) 是 Quartz API 中的一种方法,应该可以正常工作。
    猜你喜欢
    • 2021-10-27
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多