java – Quartz&Spring – 集群但不持久?

在我的 Spring应用程序中,我使用Schedulerfactorybean与Quartz集成.我们将要集群的Tomcat实例,因此我想拥有一个集群的Quartz环境,以便相同的作业不会在不同的Web服务器上同时运行.

为此,我的app-context.xml如下所示:

<bean class="org.springframework.scheduling.quartz.Schedulerfactorybean">
    <property name="triggers">
        <list>
            <ref bean="crontrigger"/>
            <ref bean="simpleTrigger" />
        </list>
    </property>
    <property name="dataSource" ref="dataSource"/>
    <property name="overwriteExistingJobs" value="true"/>
    <!-- found in applicationContext-data.xml -->
    <property name="applicationContextSchedulerContextKey" value="applicationContext"/>
    <property name="quartzProperties">
        <props>
            <prop key="org.quartz.scheduler.instanceName">SomeBatchScheduler</prop>
            <prop key="org.quartz.scheduler.instanceId">AUTO</prop>
            <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
            <!--<prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>-->
            <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
            <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
            <prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>
            <prop key="org.quartz.jobStore.isClustered">true</prop>
            <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
            <prop key="org.quartz.threadPool.threadCount">25</prop>
            <prop key="org.quartz.threadPool.threadPriority">5</prop>
        </props>
    </property>
</bean>

一切都很好,除了当我尝试删除或更改触发器,然后重新启动我的应用程序,旧的触发器仍然保留在数据库中,并仍然运行.我不想要这个,我只是希望在应用程序停止(或重新启动)时删除它们.我将overwriteExistingJobs属性的值设置为true,因为我以为这是它所做的.

有任何想法吗?所有我想使用DB是集群,而不是任何类型的持久性.

解决方法

我已经做了关于这个话题的研究,这是Quartz的一个众所周知的错误,我在他们的论坛上发现了几个帖子.为了解决这个问题,我创建了一个bean,它删除了Quartz表中的所有记录.您可以在加载Quartz bean之前调用此bean(在Scheduler bean上添加“依赖”),当您的弹簧上下文被破坏时(确保数据库连接池仍然打开),或通过某种形式的UI.工作组还有一个错误,不要惊讶.我的第一个修复是用修复创建一个客户Quartz jar,但是当他们发布一个新版本时,它很难升级(我当时使用的是1.4或1.5) – 不要记得.

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...