使用Quartz的Spring Local TaskExecutor线程池

时间:2011-03-03 15:01:08

标签: spring quartz-scheduler

我试图使用带有石英的LocalTask​​ExecutorThreadPool但是当我尝试将它用作石英taskexecutor时,我得到了这个错误。

ERROR:

arg.springframework.beans.TypeMismatchException:无法转换类型的属性值 [org.springframework.scheduling.quartz.LocalTask​​ExecutorThreadPool]为属性'taskExecutor'所需的类型[org.springframework.core.task.TaskExecutor]。

Spring Config

<bean id="taskExecutor" class="org.springframework.scheduling.quartz.LocalTaskExecutorThreadPool">

</bean> 

<bean id="schedulerTarget" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" scope="singleton" lazy-init="false">
    <property name="applicationContextSchedulerContextKey">
        <value>applicationContext</value>
    </property>
    <property name="dataSource">
        <ref bean="dataSrcBean"/>
    </property>
    <property name="transactionManager">
        <ref bean="txManager" />
    </property>
    <property name="taskExecutor">
        <ref bean="taskExecutor" />
    </property>
    <property name="quartzProperties">
        <props>
            <prop key="org.quartz.jobStore.class">org.springframework.scheduling.quartz.LocalDataSourceJobStore</prop>
            <prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop> 
            <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.MSSQLDelegate</prop>
            <prop key="org.quartz.jobStore.selectWithLockSQL">SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ?</prop>
            <prop key="org.quartz.plugin.shutdownhook.class">org.quartz.plugins.management.ShutdownHookPlugin</prop>
            <prop key="org.quartz.plugin.shutdownhook.cleanShutdown">true</prop>
            <prop key="org.quartz.scheduler.instanceName">Sched1</prop>
            <prop key="org.quartz.scheduler.instanceId">1</prop>
            <prop key="org.quartz.scheduler.rmi.export">false</prop>
            <prop key="org.quartz.scheduler.rmi.proxy">false</prop>
        </props>
    </property>  
</bean>

这样做的全部目的是让Spring控制石英制造的任何连接。我已经有一个Spring事务管理器供调度程序使用,但似乎调度程序将在我的数据库上保留睡眠连接。

Thnaks

1 个答案:

答案 0 :(得分:2)

您不应自己使用LocalTaskExecutorThreadPool - SchedulerFactoryBean在内部使用此功能将TaskExecutor包裹在Quartz的ThreadPool界面中。

SchedulerFactoryBean期望注入taskExecutor个对象。您需要确定要使用的TaskExecutor的哪个实现。