Java Springbeans已销毁,但quartz正在执行清理,需要数据源进行连接并引发异常

Java Springbeans已销毁,但quartz正在执行清理,需要数据源进行连接并引发异常,java,spring,tomcat6,quartz-scheduler,spring-batch,Java,Spring,Tomcat6,Quartz Scheduler,Spring Batch,在关闭tomcat时,我看到spring管理的bean被破坏,其中包括dataSource。Spring指示quartz关闭,quartz正在运行,配置waitForJobsToCompleteOnShutdown=true。因此,当完成作业时,我对quartz的期望值低于预期,因为它没有数据源来获得连接: 2013-06-24 17:22:47,952 ERROR | schedulerFactoryBean_Worker-1 | org.quartz.core.ErrorLogger  |

在关闭tomcat时,我看到spring管理的bean被破坏,其中包括dataSource。Spring指示quartz关闭,quartz正在运行,配置waitForJobsToCompleteOnShutdown=true。因此,当完成作业时,我对quartz的期望值低于预期,因为它没有数据源来获得连接:

2013-06-24 17:22:47,952 ERROR | schedulerFactoryBean_Worker-1 | org.quartz.core.ErrorLogger  | An error occured while marking executed job complete. job= 'DEFAULT.invoiceResponseJobDetail' 
    org.quartz.JobPersistenceException: Failed to obtain DB connection from data source 'springNonTxDataSource.schedulerFactoryBean': java.lang.NullPointerException
    at org.quartz.impl.jdbcjobstore.JobStoreCMT.getNonManagedTXConnection(JobStoreCMT.java:173) ~[quartz-2.1.7.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3788) ~[quartz-2.1.7.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3760) ~[quartz-2.1.7.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggeredJobComplete(JobStoreSupport.java:3000) ~[quartz-2.1.7.jar:na]
    at org.quartz.core.QuartzScheduler.notifyJobStoreJobComplete(QuartzScheduler.java:1753) ~[quartz-2.1.7.jar:na]
    at org.quartz.core.JobRunShell.run(JobRunShell.java:281) ~[quartz-2.1.7.jar:na]
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) ~[quartz-2.1.7.jar:na]
    Caused by: java.lang.NullPointerException: null
    at org.quartz.impl.jdbcjobstore.JobStoreCMT.getNonManagedTXConnection(JobStoreCMT.java:165) ~[quartz-2.1.7.jar:na]
    ... 6 common frames omitted
数据源配置:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/springDataSource" />
    <property name="lookupOnStartup" value="true" />
    <property name="proxyInterface" value="javax.sql.DataSource" />
</bean>

弹簧石英配置:

<bean id="schedulerFactoryBean"
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean" depends-on="dataSource">

    <property name="waitForJobsToCompleteOnShutdown">
        <value>true</value>
    </property>

    <property name="triggers">
        <list>
            <ref bean="accountRequestJobDetailTrigger" />
        </list>
    </property>

    <property name="schedulerContextAsMap">
        <map>
            <entry key="accountRequestJob" value-ref="accountRequestJob" />
        </map>
    </property>

    <property name="quartzProperties">
        <props>
            <prop key="org.quartz.scheduler.skipUpdateCheck">true</prop>
            <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreCMT</prop>
            <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
            </prop>
            <prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>
            <prop key="org.quartz.jobStore.isClustered">true</prop>
            <prop key="org.quartz.scheduler.instanceName">SAPClusteredScheduler</prop>
            <prop key="org.quartz.scheduler.instanceId">AUTO</prop>
        </props>
    </property>

    <property name="dataSource" ref="dataSource" />
</bean>

真的
真的
org.quartz.impl.jdbcjobstore.JobStoreCMT
org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
QRTZ_
真的
SAPClusteredScheduler
自动的
我怎样才能让这种工作清理在春豆被破坏之前进行呢?

我相信你可以使用。让您的bean/类实现它,并确保
getPhase()
返回
Integer.MIN\u值


回答中还提到:

我们可以查看您的配置吗?在问题中添加了配置否它没有解决问题。这类似于标记一个依赖于其他bean的bean。