2009-10-22 42 views
0

我需要每隔5000ms调用一次MngtImpl类的findItemByPIdEndDate()方法,但似乎没有任何事情发生。我错过了什么吗?如何执行使用spring beans的方法

<bean id="findItemByPIdEndDate" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
    <property name="targetObject" ref="MngtImpl"/> 
    <property name="targetMethod" value="findItemByPIdEndDate"/> 
    <property name="repeatInterval" value="50000"/> 
</bean> 

@马特b口读过一些这方面,一切都是新的,以我在这里..所以我带着这个..又一次它不工作,我错过什么了?

<bean id="findItemByPIdEndDate" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
    <property name="targetObject" ref="MngtImpl" /> 
    <property name="targetMethod" value="findItemByPIdEndDate" /> 
</bean> 

<bean id="compareDateTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
    <property name="jobDetail" ref="findItemByPIdEndDate" /> 
    <property name="startDelay" value="0" /> 
    <property name="repeatInterval" value="50000" /> 
</bean> 

回答

4

对于此任务,Chapter 23. Scheduling and Thread Pooling is your friend。这就是说,这里是一个简短的总结。

首先,定义您的Job

<bean id="findItemByPIdEndDate" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
    <property name="targetObject" ref="MngtImpl"/> 
    <property name="targetMethod" value="findItemByPIdEndDate"/> 
</bean> 

现在,你需要安排使用触发器和SchedulerFactoryBean工作。对于触发,我建议你的情况下,使用SimpleTriggerBean

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
    <!-- see the example of method invoking job above --> 
    <property name="jobDetail" ref="findItemByPIdEndDate" /> 
    <!-- 10 seconds --> 
    <property name="startDelay" value="10000" /> 
    <!-- repeat every 50 seconds --> 
    <property name="repeatInterval" value="50000" /> 
</bean> 

要完成的一切,成立了SchedulerFactoryBean

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
    <property name="triggers"> 
    <list> 
     <ref bean="simpleTrigger" /> 
    </list> 
    </property> 
</bean> 
+0

不知道我确实得到你,但欢迎你:) – 2009-10-22 13:18:44

+0

无论构建失败是否与新的Spring配置有关,这都是另一回事。 – 2009-10-22 13:30:18

4

你需要更多的管道工作,使石英工作。只是宣布MethodInvokingJobDetailFactoryBean自己将不会做任何事情。

但是,Quartz对此是过度的,Java5 +可以自己做到这一点。我建议您阅读Spring的ScheduledExecutorFactoryBean,它结合MethodInvokingRunnable,允许您定期调用您的方法。

+0

能否请您详细简单介绍一下这个,我不知道在哪里我应该看看你写的这个页面,就像你说的那样:“你需要更多的管道工作来完成Quartz的工作” – ant 2009-10-22 12:01:20

+0

他说Quartz比你需要的更复杂,而使用Quartz的INSTEAD,请阅读ScheduledExecutorFactoryBean和MethodInvokingRunnable。我同意,除非你有需要使用Quartz。 ScheduledExecutorService将比使用Quartz更容易满足您的需求。 – 2009-10-22 12:43:16

0

到目前为止,您所做的仅仅是实例化MethodInvokingJobDetailFactoryBean() - 基本上,您所做的所有工作都是创建Job。现在,您需要针对它的计划进行一些配置,以及触发它的原因。

看看the section in the Spring manual on Quartz