4

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]

CronTriggerFactoryBean参照への参照を使用する以外にJobDetailFactoryBean、または文字列のみをプロパティとして受け取る別のトリガー ファクトリ Beanを構成する別の方法はありますか? これは、クラスタリングを使用する前はすべて機能していましたが、ジョブが BLOB に書き込まれるようになったため、文字列のみを永続化する必要があります。それは結構です、どうやってそれを成し遂げますか?

4

1 に答える 1

4

ご参照ください:

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

問題:

これは、Spring Framework と Quartz を一緒に使用すると発生しorg.quartz.jobStore.useProperties=trueます。つまり、すべての Job データは、シリアル化された Java オブジェクトではなく、プロパティとしてデータベースに格納されます。

エラーは、プロパティのセットとして表すことができないへのCronTriggerFactoryBean参照を格納するSpring クラスが原因です。JobDetailJobDataMap

CronTriggerFactoryBeanjobDetail をトリガーの に設定していjobDataMapます。

回避策:

から伸ばしCronTriggerFactoryBeanて外します。JobDetailjobDataMap

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);
    }
}
于 2013-07-10T10:13:03.113 に答える