2011-11-11 14 views
1

私は春のバッチジョブをスケジュールするために石英を使用しています。同じJava(バネ)バッチジョブの複数のインスタンスを作成できますか?

ジョブは、複数のファイルを持つフォルダからファイルを読み取り、処理して別のフォルダにコピーします。

ジョブの複数のインスタンスを作成すると、複数のファイルを読み込み、並行実行できますか?

私の質問は:春のバッチで

、それは同じジョブの複数のインスタンスを起動することは可能でしょうか?私は石英を使用していますか?

答えて

1

それは、例えば、MethodInvokingJobDetailFactoryBeanを使用して、クォーツで可能です:

<bean id="myjob" 
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
    <property name="targetObject"> 
     <ref bean="someBean" /> 
    </property> 
    <property name="targetMethod" value="someMethod" /> 
    <!-- The concurrent property is already true by default 
    <property name="concurrent" value="true" /> 
    --> 
</bean> 

はデフォルトでSpring documentation

を引用して、クォーツジョブズCEOは、との干渉の仕事の可能性が生じ、ステートレスですお互い。同じJobDetailに対して2つのトリガーを指定すると、最初のジョブが終了する前に2番目のトリガーが開始される可能性があります。 JobDetailクラスがStatefulインターフェイスを実装する場合、これは起こりません。 2番目のジョブは、最初のジョブが完了する前に開始されません。 MethodInvokingJobDetailFactoryBeanによるジョブを非同期にするには、concurrentフラグをfalseに設定します。春のバッチで

+0

しかし、私は、私が使用する必要がありますどのように多くのスレッドを指定することができます。それは、適切なタスク実行に設定されている場合、別のスレッドで各ジョブを起動しますあなたのSpring構成でjobLauncher? – user2434

2

いくつかのジョブを開始することが可能である、あなたは各jobLauncher.run()コールのためにJobParameters異なる供給している提供。

<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher"> 
    <property name="jobRepository" ref="jobRepository" /> 
    <property name="taskExecutor" ref="taskExecutor" /> 
</bean> 

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" 
    p:corePoolSize="5" 
    p:maxPoolSize="30" /> 
関連する問題