Spring Batch 5.0.0-M6 和 4.3.7 釋出了!

釋出 | Mahmoud Ben Hassine | 2022年9月22日 | ...

我很高興宣佈 Spring Batch 5.0.0-M6 現在可從我們的里程碑倉庫獲取,4.3.7 可從 Maven Central 獲取。版本 4.3.7 是一個補丁版本,可以作為 4.3.6 的直接替代品使用。你可以在這裡找到其釋出說明。這篇部落格文章主要介紹新的里程碑版本 5.0.0-M6。在這個里程碑中,我們著重改進了 Spring Batch 的配置過程,使其更加靈活和簡單。這篇部落格文章將詳細介紹框架在此領域的主要變化,並展示在此里程碑版本中引入的新特性。有關完整的變更列表,請參閱釋出說明

EnableBatchProcessing 中的新註解屬性

在此版本中,@EnableBatchProcessing 註解引入了新屬性,用於指定應使用哪些元件和引數來配置批處理基礎設施 Bean。例如,你現在可以指定 Spring Batch 在 Job Repository 中應該配置哪個資料來源和事務管理器。以下片段展示了進行此類配置的新方式:

@Configuration
@EnableBatchProcessing(dataSourceRef = "batchDataSource", transactionManagerRef = "batchTransactionManager")
public class MyJobConfiguration {

	@Bean
	public Job job(JobRepository jobRepository) {
		return new JobBuilder("myJob", jobRepository)
			 //define job flow as needed
			 .build();
	}

}

在此示例中,batchDataSourcebatchTransactionManager 指的是應用程式上下文中用於配置 Job Repository 和 Job Explorer 的 Bean。你不再需要定義自定義的 BatchConfiguer,此版本中已將其移除。例如,在 Spring Batch v4 中,可以透過提供自定義的 BatchConfigurer 來提供自定義的執行上下文序列化器,如下所示:

@Configuration
@EnableBatchProcessing
public class MyJobConfigWithCustomSerializer {

    @Bean
    public BatchConfigurer batchConfigurer() {
        return new DefaultBatchConfigurer() {
            @Override
            public JobRepository getJobRepository() {
                JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
                factory.setSerializer(createCustomSerializer());
                // set other properties on the factory bean
                try {
                    factory.afterPropertiesSet();
                    return factory.getObject();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }

            @Override
            public JobExplorer getJobExplorer() {
                JobExplorerFactoryBean factoryBean = new JobExplorerFactoryBean();
                factoryBean.setSerializer(createCustomSerializer());
                // set other properties on the factory bean
                try {
                    factoryBean.afterPropertiesSet();
                    return factoryBean.getObject();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }

            private ExecutionContextSerializer createCustomSerializer() {
                Jackson2ExecutionContextStringSerializer serializer = new Jackson2ExecutionContextStringSerializer();
                // customize serializer
                return serializer;
            }
        };
    }

}

在 Spring Batch v5 中,你可以按如下方式提供自定義序列化器:

@Configuration
@EnableBatchProcessing(executionContextSerializerRef = "myCustomSerializer")
public class MyJobConfigWithCustomSerializer {

    @Bean
    public Job job(JobRepository jobRepository) {
        return new JobBuilder("myJob", jobRepository)
                //define job flow as needed
                .build();
    }
    
    @Bean
    public ExecutionContextSerializer myCustomSerializer() {
        Jackson2ExecutionContextStringSerializer serializer = new Jackson2ExecutionContextStringSerializer();
        // customize serializer
        return serializer;
    }

}

我們認為這種新的 Spring Batch 配置方式更直觀、更簡單、更不容易出錯。

基礎設施 Bean 的新配置類

在此版本中,你可以使用一個名為 DefaultBatchConfiguration 的新配置類,作為配置基礎設施 Bean 的另一種方式,替代使用 @EnableBatchProcessing。此類為基礎設施 Bean 提供了預設配置,你可以根據需要進行自定義。以下片段展示了該類的典型用法:

@Configuration
class MyJobConfiguration extends DefaultBatchConfiguration {

	@Bean
	public Job job(JobRepository jobRepository) {
		return new JobBuilder("myJob", jobRepository)
				//define job flow as needed
				.build();
	}

}

在此示例中,注入到 Job Bean 定義中的 JobRepository Bean 在 DefaultBatchConfiguration 類中定義。你可以透過覆蓋相應的 getter 來指定自定義引數。例如,以下示例展示瞭如何覆蓋 Job Repository 和 Job Explorer 中使用的預設字元編碼:

@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;
	}
}

JobExplorer 和 JobOperator 中的事務支援

此版本透過 JobExplorerFactoryBean 建立的 JobExplorer 中引入了事務支援。現在,你可以指定在查詢批處理元資料時使用哪個事務管理器來驅動只讀事務。此外,你現在可以自定義事務屬性。透過一個名為 JobOperatorFactoryBean 的新 Factory Bean,同樣的事務支援也新增到了 JobOperator 中。

棄用和 API 變更

此里程碑版本引入了以下棄用和 API 變更:

  • JobBuilderFactoryStepBuilderFactory 現已棄用。你應該改用 JobBuilderStepBuilder
  • BatchConfigurerDefaultBatchConfigurer 已被移除。你不應再使用此介面及其預設實現來定製 @EnableBatchProcessing 的行為。

依賴升級

主要依賴已升級到以下版本:

  • 升級到 Spring Framework 6.0.0-M6
  • 升級到 Spring Data 2022.0.0-M6
  • 升級到 Spring Integration 6.0.0-M5
  • 升級到 Spring AMQP 3.0.0-M4
  • 升級到 Spring for Apache Kafka 3.0.0-M6
  • 升級到 Spring Retry 2.0.0-M1
  • 升級到 Spring LDAP 3.0.0-M4
  • 升級到 Micrometer 1.10.0-M5

反饋

我要感謝所有為此版本做出貢獻的人!在我們繼續開發 Spring Batch 5 的過程中,期待你們在 GithubTwitterStackOverflow 上提供反饋。


Spring Batch 主頁|Github 上的原始碼|參考文件

訂閱 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助力你的進步。

瞭解更多

獲取支援

Tanzu Spring 透過一項簡單的訂閱提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案。

瞭解更多

近期活動

檢視 Spring 社群的所有近期活動。

檢視全部