Spring Batch 5.0.0-M6 和 4.3.7 已发布!

版本发布 | Mahmoud Ben Hassine | 2022 年 9 月 22 日 | ...

我很高兴地宣布 Spring Batch 5.0.0-M6 已在我们的 milestone repository 中发布,同时 4.3.7 已在 Maven Central 中发布。版本 4.3.7 是一个补丁版本,可以作为 4.3.6 的直接替代品。您可以在 此处 找到其发行说明。这篇博文更多地是关于新的里程碑版本 5.0.0-M6。在此里程碑中,我们专注于改进 Spring Batch 的配置流程,使其更加灵活和直接。这篇博文将介绍框架在此领域的主要变化,并展示此里程碑版本中引入的新功能。完整的变更列表,请参阅 发行说明

@EnableBatchProcessing 中的新注解属性

在此版本中,@EnableBatchProcessing 注解引入了新的属性,用于指定用于配置 Batch 基础设施 Bean 的组件和参数。例如,现在您可以指定 Spring Batch 应在作业仓库中配置哪个数据源和事务管理器。以下代码片段展示了进行此类配置的新方法。

@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 指的是应用程序上下文中用于配置作业仓库和作业浏览器的 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 的新配置类,作为使用 @EnableBatchProcessing 配置基础设施 Bean 的替代方案。此类提供具有默认配置的基础设施 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 来指定自定义参数。例如,以下示例显示了如何覆盖作业仓库和作业浏览器中使用的默认字符编码。

@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 中引入了事务支持。现在您可以指定使用哪个事务管理器来驱动查询 Batch 元数据时的只读事务。此外,您还可以自定义事务属性。通过一个名为 JobOperatorFactoryBean 的新工厂 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 社区所有即将举行的活动。

查看所有