Spring Batch 4.0.0.M1 现已发布

发布 | Michael Minella | January 04, 2017 | ...

我们很高兴地宣布,Spring Batch 4.0.0.M1 现已通过 Github 和 Pivotal 下载仓库发布。此版本是 Spring Batch 4.0 发布的第一个里程碑。非常感谢所有为此版本做出贡献的人们。

有什么新内容?

我们借此机会从新的角度审视了 Spring Batch 的一些方面。具体来说

  • Java 基线
  • 依赖基线
  • Java 配置

Java 基线

Spring Batch 历来遵循 Spring Framework 的基线,旨在提供 Spring Batch 和 Spring Framework 版本之间最佳的互操作性。Spring Batch 4.0 借此机会升级到 Spring Framework 5 作为最低要求版本。因此,Spring Batch 4 将需要 Java 8。如果您已经在使用 Java 8 的 Spring Batch,这应该是一个相当透明的改变,因为 Spring Batch 多年来一直对 Java 8 有很好的支持。只要 Java 8 存在,就一直支持以下操作:

@Bean
public JdbcCursorItemReader<Foo> reader() {
	JdbcCursorItemReader<Foo> reader = new JdbcCursorItemReader<>();

	reader.setDataSource(this.dataSource);
	reader.setName("fooReader");
	reader.setSql("SELECT * FROM FOO ORDER BY FIRST");
	reader.setRowMapper((rs, rowNum) -> {
		Foo foo = new Foo();

		foo.setFirst(rs.getInt("FIRST"));
		foo.setFirst(rs.getString("SECOND"));
		foo.setFirst(rs.getString("THIRD"));

		return foo;
	});

	return reader;
}

就像 Spring Framework 5 对 Java 8 的重新基线化一样,这对框架内部产生了更大的影响。现在,我们这些框架的开发者和贡献者将能够利用您一直在使用的 Java 8 的有趣特性。

依赖基线

除了根据 Spring Framework 重新确定 Java 基线外,Spring Batch 4 还全面审查了所有依赖项,并将它们升级到最新版本。这既是为了跟上最新版本,也是为了使我们能够为所提供的功能提供支持。我们需要依赖这些依赖项的受支持版本,这样才能解决 bug。因此,我们需要保持与它们当前受支持的版本同步。一个例子是 Hibernate。Spring Batch 3.x 支持追溯到 Hibernate 4.2.x。然而,如果发现 Hibernate 4.2.x 的问题,它不会在那里得到修复。JBoss 只会在 5.2 中修复它。正因为如此,我们需要保持最新。Spring Framework 5 对其所有依赖项进行了全面审查。Spring Batch 4 更新其所有依赖项,使其与 Spring Framework 保持一致。

Java 配置

Java 配置对于 Spring Batch 来说并不新鲜。Spring Batch 2.2 已经有了 @EnableBatchProcessing 注解以及相关的构建器(builders)。然而,Java 配置方面仍有许多需要改进的地方。例如,使用 Spring Batch 3.0.7 中可用的功能,配置 FlatFileItemReader 可能看起来像下面这样:

@Bean
public FlatFileItemReader reader(Resource resource) throws Exception {
	FlatFileItemReader<Foo> reader = new FlatFileItemReader<>();

	reader.setName("fooReader");
	reader.setResource(resource);

	BeanWrapperFieldSetMapper<Foo> fieldSetMapper = 
		new BeanWrapperFieldSetMapper<>();
	fieldSetMapper.setTargetType(Foo.class);
	fieldSetMapper.afterPropertiesSet();

	DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
	tokenizer.setNames(String [] {"first", "second", "third"});
	tokenizer.afterProperitesSet();

	DefaultLineMapper lineMapper = new DefaultLineMapper();
	lineMapper.setLineTokenizer(tokenizer);
	lineMapper.setFieldSetMapper(fieldSetMapper);

	reader.setLineMapper(lineMapper);
}

然而,在 Spring Batch 4 中,我们引入了一系列构建器(builders),它们将简化对所提供的 reader 和 writer 的构建。上面使用 Spring Batch 3.0.x 的示例,在 Spring Batch 4 中使用构建器(builders)可以转换为如下所示:

@Bean
public FlatFileItemReader reader(Resource resource) {
	return new FlatFileItemReaderBuilder<Foo>()
		.name("fooReader")
		.resource(resource)
		.delimited()
		.names(new String[] {"first", "second", "third"})
		.targetType(Foo.class)
		.build();
}

截至此里程碑版本,FlatFileItemReaderFlatFileItemWriterJdbcCursorItemReaderJdbcBatchItemWriter 的构建器(builders)已可用。我们将在 Spring Batch 4 正式发布(GA)之前处理其他的 item reader 和 item writer。

后续计划是什么?

展望未来,我们计划为其他的 Spring Batch reader 和 writer 实现构建器(builders)。我们还计划全面审查我们的文档。目前,文档采用的是我们认为的“XML优先”方法。对于 Spring Batch 的 GA 发布版本,我们打算重构文档,使其更“Java优先”,以提供关于如何使用 Java 配置来配置批处理应用程序的更好见解。请关注后续的里程碑版本,以及 Spring Batch 4 在 Spring Framework 5 GA 发布后不久将正式可用。

您怎么看?

我们期待您通过 JiraStackOverflow 或直接通过 Twitter @michaelminella 提供对这些新功能的反馈!

Spring Batch 主页 | GitHub 上的源代码 | 参考文档

获取 Spring 新闻通讯

订阅 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您快速提升。

了解更多

获取支持

Tanzu Spring 通过一项简单的订阅,为 OpenJDK™、Spring 和 Apache Tomcat® 提供支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部