2012-04-30 10 views
1

私は奇妙な問題に取り組んでおり、ナットを運転しています。 http://www.mkyong.com/spring/spring-quartz-scheduler-example/Java-Spring-quartz:ループでジョブが実行されるのはなぜですか?

私はcronのトリガーを選んだとちょうど10:45に実行するように変更しました:

私はここで素敵なチュートリアルを追ってきました。しかし、いったん仕事が始まると、それはループに入り、何度も同じメッセージを繰り返し印刷しています。ここ

は私のソフトウェアです:

  • 春:3.0.5
  • 石英:1.8.5
  • のjava:私は春-石英を変更していませんでした1.6.31

.xml(上記のチュートリアルに付属しています)(cron式を除く)

EDITED(追加された豆の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> 

EDITED(追加コードジョブとタスクコード):

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(); 
    } 

} 
    } 
ジョブ・クラスであります
+1

ジョブをスケジュールするために使用している正確なコードを投稿してください。 –

+0

cron式も提供してください。 – Thomas

+0

ありがとうT(h?)oma [s | z]。 beans.xmlファイルを追加しました。コードの残りの部分は、ウェブサイトで提供されている例と同じです。 – BoCode

答えて

3

あなたはどう思いますかそれは間違っていますか?

<property name="cronExpression" value="* 45 10 * * ?" /> 

はこのCRON式は意味:が毎日に10:45の毎秒でジョブを実行毎日に10時45分にジョブを実行(最初のアスタリスクが第二であります)。設計どおりに動作します。たぶんあなたの場合(与えられた時間に一度実行)SimpleTriggerがより適しています(SimpleTriggerBean参照)。

UPDATE:あなたは、毎日午前10時45分に一度ジョブを実行したい場合は、これは正しい表現である:

<property name="cronExpression" value="0 45 10 * * ?" /> 
+0

しかし、なぜそれはループに入りますか?一度だけ実行することは想定されておらず、翌日到着するまで待ちますか? – BoCode

+0

@BoCode:ああ、私は毎日それを実行することでループになると思った。あなたも私たちに仕事を教えてくれますか?あなたの仕事がrefire setで 'JobExecutionException'を投げていないと確信していますか? –

+0

ありがとうThomasz。しかし、なぜこのようなシンプルなcron式のためにこの仕事はループに入っていますか? – BoCode

関連する問題