我正在努力解决一个奇怪的问题,这让我发疯。
我在这里遵循了很好的教程:http://www.mkyong.com/spring/spring-quartz-scheduler-example/
我选择了 cron 触发器,并将其更改为在上午 10:45 运行。但是一旦作业开始,它就会循环并一遍又一遍地打印相同的消息。
这是我的软件:
- Spring :3.0.5
- quartz :1.8.5
- java: 1.6.31
我没有更改上述教程附带的 spring-quartz.xml(除了 cron 表达式)。
已编辑(添加了 beans xml 内容):
<bean id="runMeTask" class="com.test.RunMeTask" />
<bean name="runMeJob"
class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.test.RunMeJob" />
<property name="jobDataAsMap">
<map>
<entry key="runMeTask" value-ref="runMeTask" />
</map>
</property>
</bean>
<!-- Simple Trigger -->
<bean id="simpleTrigger"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="runMeJob" />
<property name="repeatInterval" value="5000" />
<property name="startDelay" value="1000" />
</bean>
<!-- Cron Trigger -->
<bean id="cronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="runMeJob" />
<property name="cronExpression" value="* 45 10 * * ?" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobDetails">
<list>
<ref bean="runMeJob" />
</list>
</property>
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
编辑(添加代码作业和任务代码):
public class RunMeTask
{
public void printMe() {
try{
System.out.println("Run Me ~");
}
catch(Exception e){
e.printStackTrace();
}
}
}
这是工作类别
public class RunMeJob extends QuartzJobBean
{
private RunMeTask runMeTask;
public void setRunMeTask(RunMeTask runMeTask) {
this.runMeTask = runMeTask;
}
protected void executeInternal(JobExecutionContext context){
try{
runMeTask.printMe();
}
catch(Exception e){
e.printStackTrace();
}
}
}
最佳答案
为什么你认为这是不正确的?
<property name="cronExpression" value="* 45 10 * * ?" />
此 CRON 表达式的意思是:在每天的 10:45 运行作业 在每天运行作业每天 10:45 的第二个(第一个星号是第二个)。按设计工作。也许在您的情况下(在给定时间运行一次)SimpleTrigger
更合适(请参阅: SimpleTriggerBean
)。
更新:如果您想每天 10:45 运行一次作业,这是正确的表达式:
<property name="cronExpression" value="0 45 10 * * ?" />
关于Java-Spring-quartz :why is the job being fired in a loop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10379088/