使Quartz调度程序在没有JDBC的情况下持久化

Geo*_*old 7 java scheduled-tasks quartz-scheduler mongodb

我们正在围绕MongoDB构建一个应用程序,并且需要定期运行类似cron的作业.当项目基于带有JDBC的RDBMS时,我之前使用过Quartz这种事情.

由于我们已经在本项目中使用MongoDB作为主数据存储区,因此我不想仅仅为了保留Quartz作业而引入RDBMS,但MongoDB 似乎没有任何类型的JobStore实现.

任何人都可以推荐使用MongoDB支持Quartz的方法,或者Quartz的简单替代方法吗?我的需求相当简单(使用某种配置方式运行各种java作业,àlacron).

小智 8

我为Quartz编写了一个MongoDB JobStore,它位于这里:https://github.com/mulesoft/quartz-mongodb它不支持所有内容,但它适用于大量用例.


Cle*_*t P 3

我们使用 Spring 运行quartz,它只是一个包含定义的作业和 cron 表达式的 XML 文件。

在春季宣布工作:

  <bean name="myJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="concurrent" value="false"/>
    <property name="targetBeanName" value="myBean"/>
    <property name="targetMethod" value="myScheduledMethod"/>
  </bean>

  <bean id="myJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="myJob"/>
    <!-- every 30s -->
    <property name="cronExpression" value="0/30 * * * * ?"/>
  </bean>
Run Code Online (Sandbox Code Playgroud)

石英接线:

  <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
      <!-- List of batch jobs to be fed to the scheduler. -->
      <list>
        <ref bean="myTrigger"/>
      </list>
    </property>
  </bean>
Run Code Online (Sandbox Code Playgroud)

运行它:

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App 
{
    public static void main( String[] args ) throws Exception
    {
        new ClassPathXmlApplicationContext("jobs-context.xml");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这只是嵌入式运行,对吗?这对于某些工作来说很好,但是对于持久性工作,特别是非重复性工作,您希望有一个持久性存储来支持它,以便您可以应对删除等问题。 (7认同)