java crontriggerbean_java – 使用JobStoreTX为石英聚类配置CronTriggerFactoryBean

在使用Quartz 2.1.5和集群配置时遇到问题,由于设置了'org.quartz.jobStore.useProperties = true',导致在存储CronTrigger时出现JobDataMap值必须为字符串的异常。解决方案是创建一个自定义的PersistableCronTriggerFactoryBean,重写afterPropertiesSet方法,移除JobDetail元素以避免存储问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们正在使用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配置:

当我们跑步时,我们得到一个错误说

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]

是否有另一种配置CronTriggerFactoryBean的方法,而不是使用对JobDetailFactoryBean引用的引用,或者只将字符串作为属性的其他触发器工厂bean?这一切在我们想要使用群集之前都有效,但是现在要将作业写入blob,他们只希望持久化字符串.那没关系,我怎么做到的?

解决方法:

请参考:

问题:

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

错误是因为Spring类CronTriggerFactoryBean存储对JobDataMap中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,spring,quartz-scheduler

来源: https://codeday.me/bug/20190620/1243528.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值