gpt4 book ai didi

java - 使用 JobStoreTX 为 quartz 集群配置 CronTriggerFactoryBean

转载 作者:搜寻专家 更新时间:2023-11-01 02:48:17 28 4
gpt4 key购买 nike

我们正在使用 Quartz 2.1.5;我们设置了以下属性:

org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.CloudscapeDelegate
org.quartz.jobStore.useProperties = true
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.isClustered=true
org.quartz.jobStore.clusterCheckinInterval=20000

和下面的bean配置:

<bean name="abcRequestsJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.hsc.correspondence.job.AbcRequestsJob" />
<property name="group" value="sftpTransfers"/>
</bean>


<bean id="abcRequestsJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="abcRequestsJob" />
<property name="group" value="sftpTransfers"/>
<property name="cronExpression" value="${quartz.abcRequests.cronExpression}" />
</bean>

当我们运行时,我们得到一个错误提示

nested exception is org.quartz.JobPersistenceException: Couldn't store trigger 'sftpTransfers.abcRequestsJobTrigger' for 'sftpTransfers.abcRequestsJob' 
job:JobDataMap values must be Strings when the 'useProperties' property is set.
Key of offending value: jobDetail
[See nested exception: java.io.IOException: JobDataMap values must be Strings when the 'useProperties' property is set. Key of offending value: jobDetail]

除了使用对 JobDetailFactoryBean 引用的引用,或者使用仅将字符串作为属性的不同触发器工厂 bean 之外,还有另一种配置 CronTriggerFactoryBean 的方法吗?在我们想使用集群之前这一切都有效,但现在作业将被写入一个 blob,他们只希望保留字符串。没关系,我该如何完成?

最佳答案

请引用:

http://site.trimplement.com/using-spring-and-quartz-with-jobstore-properties/ http://forum.springsource.org/archive/index.php/t-130984.html

问题:

当使用 org.quartz.jobStore.useProperties=true 时,Spring Framework 和 Quartz 会发生这种情况,这意味着所有作业数据都作为属性而不是序列化的 Java 对象存储在数据库中。

错误是因为 Spring 类 CronTriggerFactoryBeanJobDataMap 中存储了对 JobDetail 的引用,它不能表示为一组属性。

CronTriggerFactoryBean 正在将 jobDetail 设置到触发器的 jobDataMap 中。

解决方法:

扩展 CronTriggerFactoryBean 并从 jobDataMap 中删除 JobDetail

import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.JobDetailAwareTrigger;

public class PersistableCronTriggerFactoryBean extends CronTriggerFactoryBean {

@Override
public void afterPropertiesSet() {
super.afterPropertiesSet();

//Remove the JobDetail element
getJobDataMap().remove(JobDetailAwareTrigger.JOB_DETAIL_KEY);
}
}

关于java - 使用 JobStoreTX 为 quartz 集群配置 CronTriggerFactoryBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17150957/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com