批次應用程式
當人們在 Spring Boot 應用程式中使用 Spring Batch 時,經常會出現許多問題。本節旨在解答這些問題。
指定批次資料來源
預設情況下,批次應用程式需要 DataSource
來儲存任務詳細資訊。Spring Batch 預設期望單一 DataSource
。若要使其使用應用程式主要 DataSource
以外的 DataSource
,請宣告一個 DataSource
bean,並使用 @BatchDataSource
註解其 @Bean
方法。如果您這樣做並想要兩個資料來源,請記住將另一個標記為 @Primary
。若要取得更大的控制權,請將 @EnableBatchProcessing
新增至您的其中一個 @Configuration
類別,或擴展 DefaultBatchConfiguration
。如需更多詳細資訊,請參閱 @EnableBatchProcessing
和 DefaultBatchConfiguration
的 API 文件。
如需 Spring Batch 的更多資訊,請參閱 Spring Batch 專案頁面。
指定批次交易管理器
與指定批次資料來源類似,您可以定義一個 PlatformTransactionManager
,透過將其標記為 @BatchTransactionManager
以在批次處理中使用。如果您這樣做並想要兩個交易管理器,請記住將另一個標記為 @Primary
。
在啟動時執行 Spring Batch 任務
透過將 spring-boot-starter-batch
新增至應用程式的類別路徑,即可啟用 Spring Batch 自動組態。
如果在應用程式上下文中找到單一 Job
bean,則會在啟動時執行它(詳情請參閱 JobLauncherApplicationRunner
)。如果找到多個 Job
bean,則必須使用 spring.batch.job.name
指定應執行的任務。
若要停用執行在應用程式上下文中找到的 Job
,請將 spring.batch.job.enabled
設定為 false
。
如需更多詳細資訊,請參閱 BatchAutoConfiguration
。
從命令列執行
Spring Boot 會將任何以 --
開頭的命令列引數轉換為屬性,以新增至 Environment
,請參閱存取命令列屬性。這不應用於將引數傳遞至批次任務。若要在命令列上指定批次引數,請使用常規格式(即不含 --
),如下列範例所示
$ java -jar myapp.jar someParameter=someValue anotherParameter=anotherValue
如果您在命令列上指定 Environment
的屬性,則該屬性會被任務忽略。請考慮以下命令
$ java -jar myapp.jar --server.port=7070 someParameter=someValue
這僅為批次任務提供一個引數:someParameter=someValue
。
重新啟動已停止或失敗的任務
若要重新啟動失敗的 Job
,所有參數(識別和非識別)都必須在命令列上重新指定。非識別參數不會從先前的執行中複製。這允許修改或移除它們。
當您使用自訂 JobParametersIncrementer 時,您必須收集增量器管理的所有參數,才能重新啟動失敗的執行。 |
儲存任務儲存庫
Spring Batch 需要資料儲存區來作為 Job
儲存庫。如果您使用 Spring Boot,則必須使用實際的資料庫。請注意,它可以是記憶體內資料庫,請參閱 Configuring a Job Repository。