Mehrere Feder 3.2 geplante tasks laufen nicht parallel

Habe ich zwei geplante tasks, die ich möchte, parallel laufen. Diese beiden Aufgaben ausführen Spring Batch job. Eine alle 15 Sekunden und der andere immer 3 Sekunden. Das problem ist eine ausgeführt und die andere ist blockiert, bis er abgeschlossen ist.

Ich kann nicht scheinen zu finden, eine ähnliche Frage oder ein Beispiel überall. Irgendwelche Ideen? Danke, /w

Hier ist etwas von meiner Konfiguration. Ich bin mit spring-task-3.2 und spring-batch-2.2 mit Spring 3.2.

Diese batch-Jobs lief durch die mappingRunScheduler. Die andere Aufgabe runScheduler ist sehr ähnlich, und keine Bohnen sind geteilt.

<job id="mappingJob" xmlns="http://www.springframework.org/schema/batch">
    <step id="mappingStep1" next="mappingStep2">
        <tasklet>
            <chunk reader="mappingItemReader" 
                    processor="mappingItemProcessor" 
                    writer="mappingItemWriter" commit-interval="1" />
        </tasklet>
    </step>        
    <step id="mappingStep2">
        <tasklet ref="mappingTasklet" />
    </step>
</job>

<bean id="mappingTasklet" 
        class="com.example.repository.batch.MappingTasklet" 
        scope="prototype">
    <constructor-arg index="0" ref="mappingLister" />
</bean>

<bean id="mappingItemWriter" 
        class="com.example.repository.batch.MappingItemWriter" scope="prototype" />

<bean id="mappingLister" 
        class="com.example.repository.batch.MappingLister" 
        scope="prototype">
    <constructor-arg index="0" ref="liveRepositoryService" />
</bean>

<bean id="mappingItemProcessor" 
        class="com.example.repository.batch.MappingItemProcessor" 
        scope="prototype">
    <constructor-arg index="0" ref="liveRepositoryService" />
</bean> 

<bean id="mappingItemReader" 
        class="com.example.repository.batch.MappingItemReader" scope="step">
    <constructor-arg index="0">
        <value>#{mappingLister.getModifiedList()}</value>
    </constructor-arg>
</bean>

<bean id="mappingRunScheduler" 
        class="com.example.repository.batch.MappingRunScheduler" />

<task:scheduled-tasks>
    <task:scheduled ref="runScheduler" 
            method="run" cron="*/15 * * * * *" />
    <task:scheduled ref="mappingRunScheduler" 
            method="run" cron="*/3 * * * * *" />
</task:scheduled-tasks>

Den MappingRunScheduler - startet den batch-job.

@Service(value = "mappingRunScheduler")
@Component
public class MappingRunScheduler {

    public MappingRunScheduler() {
    }

    public void run() {
        try {
            String uuid = new Date().toString() + "-" 
                    + UUID.randomUUID().toString();
            JobParameters param = new JobParametersBuilder()
                    .addString("uuid", uuid)
                    .addString("job", "mapper").toJobParameters();
            JobExecution execution = jobLauncher.run(job, param);
        } catch (JobExecutionAlreadyRunningException 
                | JobRestartException 
                | JobParametersInvalidException ex) {
        } catch (JobInstanceAlreadyCompleteException ex) {
        }
    }

}
  • Ich würde beginnen mit der Spring-Dokumentation - speziell die überschrift 25.4.3 Die 'geplante tasks' - element. Es beschreibt nun geben Sie ein benutzerdefiniertes scheduler. Der Standard-scheduler ist nur ein thread in der thread - pool- beschrieben unter dem 25.4.1 Der 'scheduler' element überschrift.
  • Danke @BoristheSpider. Ich bin auf der Suche in <task:scheduler />. Übersehen, dass.
InformationsquelleAutor wsams | 2014-01-28
Schreibe einen Kommentar