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 ,但不要同時使用這兩種方式。 |