批處理應用程式
當人們在 Spring Boot 應用程式中使用 Spring Batch 時,經常會出現一些問題。本節將解決這些問題。
指定批處理資料來源
預設情況下,批處理應用程式需要一個 DataSource 來儲存作業詳細資訊。Spring Batch 預設只期望一個 DataSource。要讓它使用應用程式主 DataSource 之外的 DataSource,請宣告一個 DataSource Bean,並用 @BatchDataSource 註解其 @Bean 方法。如果這樣做並且想要兩個資料來源(例如,透過保留自動配置的主 DataSource),請將 @Bean 註解的 defaultCandidate 屬性設定為 false。要進行更精細的控制,請將 @EnableBatchProcessing 新增到您的一個 @Configuration 類中,或者擴充套件 DefaultBatchConfiguration。有關更多詳細資訊,請參閱 @EnableBatchProcessing 和 DefaultBatchConfiguration 的 API 文件。
有關 Spring Batch 的更多資訊,請參閱 Spring Batch 專案頁面。
指定批處理事務管理器
與指定批處理資料來源類似,您可以透過使用 @BatchTransactionManager 註解其 @Bean 方法來定義一個用於批處理的 PlatformTransactionManager。如果您這樣做並且想要兩個事務管理器(例如,透過保留自動配置的 PlatformTransactionManager),請將 @Bean 註解的 defaultCandidate 屬性設定為 false。
指定批處理任務執行器
與指定批處理資料來源類似,您可以透過使用 @BatchTaskExecutor 註解其 @Bean 方法來定義一個用於批處理的 TaskExecutor。如果您這樣做並且想要兩個任務執行器(例如,透過保留自動配置的 TaskExecutor),請將 @Bean 註解的 defaultCandidate 屬性設定為 false。
從命令列執行
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 時,您必須收集所有由增量器管理的引數才能重新啟動失敗的執行。 |