Можем ли мы создать несколько экземпляров одного и того же пакетного задания Java (Spring)? - PullRequest
1 голос
/ 11 ноября 2011

Я использую кварц, чтобы запланировать весеннее пакетное задание.

Задание считывает файл из папки (в которой есть несколько файлов), выполняет некоторую обработку и копирует ее в другую папку.

возможно ли создать несколько экземпляров задания, которые будут выполнятьсяодновременно, чтение нескольких файлов?

Мой вопрос:

Возможно ли в весеннем периоде создать несколько экземпляров одной и той же работы?Я пользуюсь кварцевым графиком?

Ответы [ 2 ]

3 голосов
/ 11 ноября 2011

В Spring Batch можно запускать несколько заданий, если вы указали разные JobParameters для каждого jobLauncher.run() вызова.jobLauncher в вашей конфигурации Spring будет порождать каждое задание в отдельном потоке, если оно сконфигурировано с соответствующим исполнителем задачи:

<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" />
1 голос
/ 11 ноября 2011

Это возможно с кварцем, используя 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>

Ссылаясь на пружинную документацию

По умолчанию, кварцевые задания не сохраняют состояния, что может создавать помехи для заданий. Если вы укажете два триггера для одного и того же JobDetail, возможно, что до того, как будет выполнено первое задание, запустится второе. Если классы JobDetail реализуют интерфейс Stateful, этого не произойдет. Вторая работа не начнется, пока не закончится первая. Чтобы сделать задания, возникающие из-за непараллельности MethodInvokingJobDetailFactoryBean, установите для флага одновременного использования значение false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...