設定 JobLauncher
-
Java
-
XML
當您使用 @EnableBatchProcessing
時,會為您提供 JobRegistry
。本節說明如何設定您自己的 JobRegistry
。
`JobLauncher` 介面最基本的實作是 TaskExecutorJobLauncher
。它唯一需要的依賴項是 JobRepository
(用於取得執行個體)。
-
Java
-
XML
以下範例顯示 Java 中的 TaskExecutorJobLauncher
Java 設定
...
@Bean
public JobLauncher jobLauncher() throws Exception {
TaskExecutorJobLauncher jobLauncher = new TaskExecutorJobLauncher();
jobLauncher.setJobRepository(jobRepository);
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
...
以下範例顯示 XML 中的 TaskExecutorJobLauncher
XML 設定
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.TaskExecutorJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
一旦取得 JobExecution,它會被傳遞到 Job 的 execute 方法,最終將 JobExecution 返回給呼叫者,如下圖所示

圖 1. Job Launcher 順序
此順序很簡單,且在從排程器啟動時運作良好。但是,嘗試從 HTTP 請求啟動時會出現問題。在這種情況下,啟動需要非同步完成,以便 TaskExecutorJobLauncher
立即返回給呼叫者。這是因為將 HTTP 請求保持開啟狀態以等待長時間運行的程序 (例如批次 Job) 所需的時間並不是好的做法。下圖顯示了一個範例順序

圖 2. 非同步 Job Launcher 順序
您可以透過設定 TaskExecutor
來設定 TaskExecutorJobLauncher
以允許這種情況。
-
Java
-
XML
以下 Java 範例設定 TaskExecutorJobLauncher
以立即返回
Java 設定
@Bean
public JobLauncher jobLauncher() {
TaskExecutorJobLauncher jobLauncher = new TaskExecutorJobLauncher();
jobLauncher.setJobRepository(jobRepository());
jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
以下 XML 範例設定 TaskExecutorJobLauncher
以立即返回
XML 設定
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.TaskExecutorJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor">
<bean class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
</property>
</bean>
您可以使用 Spring TaskExecutor
介面的任何實作來控制 Job 的非同步執行方式。