I'm using the SimpleJobLauncher Thread Pool task executor to queue jobs. Let's say, I have three jobs
Code:<job id="job1"> <step ="jobStep1"> <chunk> </chunk> </step> </job> <job id ="job2"> <step="jobStep2"> <chunk> </chunk> </step> </job> <job id="job3"> <step id="jobStep3"> <chunk> </chunk> </step> </job>
I'm using the SimpleJobLauncher class and setting its task executor so that I can queue jobs. Synchronization is required in this
case. Below is my bean definition for the job launcher.
Code:<beans:bean id="asynchJobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher" p:jobRepository-ref="jobRepository"> <beans:property name="taskExecutor"> <beans:bean class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <beans:property name="corePoolSize" value="1" /> <beans:property name="maxPoolSize" value="1" /> <beans:property name="queueCapacity" value="500" /> <beans:property name="keepAliveSeconds" value="600" /> </beans:bean> </beans:property> </beans:bean>
I want to chain jobs. Have one job call the next. I don't want to copy step definitions from one job into another. There is a possibility that the chain job will change one day and we'd like to make the change in one place rather than two.
This is what I do NOT want to do to chain jobs.
I want do use the ref to another job like this:Code:<job id="job1"> <step ="jobStep1"> <chunk>.... </chunk> </step> <step="jobStep2"> <chunk>.... </chunk> </step> </job>
However, this messes up the queueing. When I start job 1, it gets put into a STARTED state. I think start Job3 which gets queued. Once Job 1 completes, the queued job starts next, then Job2 runs. I need Job1 and Job2 to complete before running Job3. Can someone assist with how to go about this and still have a minimal amount of code?Code:<job id="job1"> <step ="jobStep1"> <chunk>.... </chunk> </step> <step="jobStep2"> <job ref="job2"/> </step> </job>


Reply With Quote