批處理應用
人們在使用 Spring Boot 應用中的 Spring Batch 時,經常會遇到一些問題。本節將解答這些問題。
指定批處理資料來源
預設情況下,批處理應用需要一個 DataSource
來儲存 Job 詳情。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 Batch Job
透過將 spring-boot-starter-batch
新增到應用的類路徑中,可以啟用 Spring Batch 自動配置。
如果在應用上下文中找到單個 Job
bean,它將在啟動時執行(詳見 JobLauncherApplicationRunner
)。如果找到多個 Job
bean,則必須使用 spring.batch.job.name
指定要執行的 Job。
要停用執行在應用上下文中找到的 Job
,請將 spring.batch.job.enabled
設定為 false
。
從命令列執行
Spring Boot 將任何以 --
開頭的命令列引數轉換為新增到 Environment
的屬性,詳見 accessing command line properties。這不應該用於向批處理 Job 傳遞引數。要在命令列上指定批處理引數,請使用常規格式(即不帶 --
),如下例所示
$ java -jar myapp.jar someParameter=someValue anotherParameter=anotherValue
如果您在命令列上指定 Environment
的屬性,則 Job 將忽略它。請考慮以下命令
$ java -jar myapp.jar --server.port=7070 someParameter=someValue
這隻會為批處理 Job 提供一個引數:someParameter=someValue
。
重啟已停止或失敗的 Job
要重新啟動失敗的 Job
,必須在命令列上重新指定所有引數(識別引數和非識別引數)。非識別引數不會從之前的執行中複製。這允許對其進行修改或刪除。
當您使用自定義的 JobParametersIncrementer 時,必須收集增量器管理的所有引數才能重新啟動失敗的執行。 |
儲存 Job Repository
Spring Batch 需要一個數據儲存來存放 Job
repository。如果您使用 Spring Boot,則必須使用實際的資料庫。請注意,它也可以是一個記憶體資料庫,詳見 Configuring a Job Repository。