У меня есть две запланированные задачи, которые я хочу запустить параллельно. Эти две задачи выполняют задание Spring Batch. Один раз каждые 15 секунд, а другой - 3 секунды. Проблема в том, что один будет запущен, а другой заблокирован, пока не закончится.Несколько запланированных задач Spring 3.2 не будут выполняться параллельно
Кажется, я не могу найти аналогичный вопрос или пример. Есть идеи? Спасибо,/w
Вот немного моей конфигурации. Я использую spring-task-3.2 и spring-batch-2.2 с Spring 3.2.
Это групповое задание управляется mappingRunScheduler
. Другая задача runScheduler
очень похожа, и никакие бобы не разделяются.
<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>
MappingRunScheduler
- выполняет пакетное задание.
@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) {
}
}
}
Я хотел бы начать с [Spring Документации ] (http://docs.spring.io/spring/docs/3.0.x/reference/scheduling.html) - в частности заголовок _25.4.3 Элемент «запланированные задачи». Он описывает теперь, чтобы указать настраиваемый планировщик. Планировщик по умолчанию имеет только один поток в пуле потоков, описанный в разделе _25.4.1. Заголовок элемента «scheduler» element_. –
Спасибо @BoristheSpider. Я смотрю '<задача: scheduler />'. Извините. – wsams