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

时间:2011-01-25 20:37:34

标签: java mongodb scheduled-tasks quartz-scheduler

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

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

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

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

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

在Spring中宣布一份工作:

  <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>

石英接线:

  <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>

使用以下命令运行:

import org.springframework.context.support.ClassPathXmlApplicationContext;

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