领先一步
VMware 提供培训和认证,助您加速进步。
了解更多我们很高兴地宣布,Spring Batch 4.0.0.M1 现已通过 Github 和 Pivotal 下载仓库提供。此版本代表了 Spring Batch 4.0 发行的第一个里程碑。非常感谢所有为此版本做出贡献的人。
我们借此机会从新的视角审视了 Spring Batch 的几个方面。具体而言:
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 保持一致。
Spring Batch 的 Java 配置并非新事物。Spring Batch 2.2 已经包含了 `@EnableBatchProcessing` 注解以及相关的构建器。然而,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 中,我们引入了一系列构建器,它们将简化提供的读取器和写入器的构建。上面使用 Spring Batch 3.0.x 的示例使用 Spring Batch 4 中的构建器将转换为以下形式:
@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();
}
在此里程碑版本中,已提供 `FlatFileItemReader`、`FlatFileItemWriter`、`JdbcCursorItemReader` 和 `JdbcBatchItemWriter` 的构建器。在 Spring Batch 4 正式发布之前,我们将解决其他项读取器和项写入器的问题。
展望未来,我们计划为其他 Spring Batch 读取器和写入器实现构建器。我们还计划全面审查我们的文档。目前的文档采用了我们认为是“XML 优先”的方法。对于 Spring Batch 的 GA 版本,我们打算重构文档,使其在配置批处理应用程序的 Java 配置方法方面更加“Java 优先”,以提供更好的见解。请关注更多里程碑版本,Spring Batch 4 将在 Spring Framework 5 发布 GA 后不久正式发布。
我们期待您在 Jira、StackOverflow 或通过 Twitter @michaelminella 直接向我反馈这些新功能!