Java 配置
Spring 3 帶來了使用 Java 而不是 XML 配置應用程式的能力。從 Spring Batch 2.2.0 開始,您可以使用相同的 Java 配置來配置批處理 Job。基於 Java 的配置有三個元件:@EnableBatchProcessing
註解和兩個構建器。
@EnableBatchProcessing
註解的作用類似於 Spring 系列中的其他 @Enable*
註解。在這種情況下,@EnableBatchProcessing
為構建批處理 Job 提供了基礎配置。在此基礎配置中,除了使許多 bean 可供自動裝配之外,還會建立一個 StepScope
和 JobScope
的例項
-
JobRepository
: 一個名為jobRepository
的 bean -
JobLauncher
: 一個名為jobLauncher
的 bean -
JobRegistry
: 一個名為jobRegistry
的 bean -
JobExplorer
: 一個名為jobExplorer
的 bean -
JobOperator
: 一個名為jobOperator
的 bean
預設實現提供了前述列表中提到的 bean,並且要求在上下文中提供一個 DataSource
和一個 PlatformTransactionManager
作為 bean。資料來源和事務管理器由 JobRepository
和 JobExplorer
例項使用。預設情況下,將使用名為 dataSource
的資料來源和名為 transactionManager
的事務管理器。您可以透過使用 @EnableBatchProcessing
註解的屬性來定製這些 bean 中的任何一個。以下示例展示瞭如何提供自定義資料來源和事務管理器
@Configuration
@EnableBatchProcessing(dataSourceRef = "batchDataSource", transactionManagerRef = "batchTransactionManager")
public class MyJobConfiguration {
@Bean
public DataSource batchDataSource() {
return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.HSQL)
.addScript("/org/springframework/batch/core/schema-hsqldb.sql")
.generateUniqueName(true).build();
}
@Bean
public JdbcTransactionManager batchTransactionManager(DataSource dataSource) {
return new JdbcTransactionManager(dataSource);
}
@Bean
public Job job(JobRepository jobRepository) {
return new JobBuilder("myJob", jobRepository)
//define job flow as needed
.build();
}
}
只有一個配置類需要帶有 @EnableBatchProcessing 註解。一旦您有了一個帶有該註解的類,您就擁有了前面描述的所有配置。 |
從 v5.0 開始,透過 DefaultBatchConfiguration
類提供了一種替代的、程式設計方式來配置基礎基礎設施 bean。這個類提供了 @EnableBatchProcessing
提供的相同 bean,可以作為配置批處理 job 的基類使用。以下程式碼片段是一個典型的使用示例
@Configuration
class MyJobConfiguration extends DefaultBatchConfiguration {
@Bean
public Job job(JobRepository jobRepository) {
return new JobBuilder("job", jobRepository)
// define job flow as needed
.build();
}
}
資料來源和事務管理器將從應用程式上下文中解析,並設定到 job repository 和 job explorer 上。您可以透過覆蓋所需的 setter 來定製任何基礎設施 bean 的配置。以下示例展示瞭如何例如定製字元編碼。
@Configuration
class MyJobConfiguration extends DefaultBatchConfiguration {
@Bean
public Job job(JobRepository jobRepository) {
return new JobBuilder("job", jobRepository)
// define job flow as needed
.build();
}
@Override
protected Charset getCharset() {
return StandardCharsets.ISO_8859_1;
}
}
不應將 @EnableBatchProcessing 與 DefaultBatchConfiguration 一起使用。您應該要麼透過 @EnableBatchProcessing 使用宣告式方式配置 Spring Batch,要麼透過繼承 DefaultBatchConfiguration 使用程式設計方式,但不要同時使用這兩種方式。 |