我正在使用石英來安排春季批量作業。我們可以創建同一個java(spring)批處理作業的多個實例嗎?
作業從文件夾(具有多個文件)讀取文件進行一些處理並將其複製到另一個文件夾。
是否可以創建作業的多個實例,並行運行,讀取多個文件?
我的問題是:
春天批次,是否有可能催生同樣的工作的多個實例?我正在使用石英碎片?
我正在使用石英來安排春季批量作業。我們可以創建同一個java(spring)批處理作業的多個實例嗎?
作業從文件夾(具有多個文件)讀取文件進行一些處理並將其複製到另一個文件夾。
是否可以創建作業的多個實例,並行運行,讀取多個文件?
我的問題是:
春天批次,是否有可能催生同樣的工作的多個實例?我正在使用石英碎片?
有可能與石英,使用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>
默認情況下,Quartz Jobs是無狀態的,導致工作與干擾的可能性彼此。如果您爲同一個JobDetail指定了兩個觸發器,則有可能在第一個作業完成之前,第二個作業將啓動。如果JobDetail類實現了有狀態接口,這不會發生。第二份工作在第一份工作完成之前不會開始。要使MethodInvokingJobDetailFactoryBean產生的作業不是併發的,請將併發標誌設置爲false。
在Spring批處理中,如果您爲每個jobLauncher.run()
調用提供了不同的JobParameters
,則可以啓動多個作業。 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" />
但我可以指定我需要使用多少線程? – user2434