java - Java EE jsr352中的Spring批处理CompositeWriter等价物
问题描述
我想了解在 Java EE 7 jsr 352 批处理中实现 Spring 批处理 CompositeWriter 的可能性。
JSL 不允许我在一个步骤中包含多个 ItemWriters。我的方法是在单个 ItemWriter 中引入委托模式来执行多个 sql 语句,就像 spring 批处理 CompositeWriter 一样。请参阅下面的示例代码。
<job id="myJob" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/jobXML_1_0.xsd" version="1.0">
<step id="step1">
<chunk item-count="1000">
<reader ref="JdbcCursorItemReader"/>
<writer ref="myCompositeItemWriter"/>
</chunk>
</step>
</job>
Pseudo code for myCompositeItemWriter:
MyCompositeItemWriter implements ItemWriter {
List<ItemWriter> delegates;
public void open() {
//initialize delegates here
}
public void write(List<Object> chunkedItems) {
for (ItemWriter myWriter: delegates) {
myWriter.write(chunkedItems);
}
}
}
解决方案
从JSR-352 规范,“8.2.1.3 Writer”部分:
A chunk type step must have one and only one item writer.
规范中没有任何内容涉及作曲作家。因此,您需要创建一个自定义复合编写器,如您所描述的那样实现委托模式,并将其用作您的步骤中的项目编写器。显然,如果您使用 Spring Batch 作为您的 JSR-352 实现,您将免费获得此功能。
推荐阅读
- javascript - 在没有 IE 的情况下抓取隐藏的输入
- python - python pandas在解码对象值时发现没有':'
- powershell - 将 MsolUser 获取到 PowerShell GUI 文本框
- c# - SelectedItem 样式不适用于带有 DataTemplate 的 ListBox?
- css - @font-face 中的自定义 CSS 属性
- gis - H3 六边形在 kepler.gl 中使用交换的 lat、long 渲染
- python - Databricks:如何将行的值转换为数组类型
- macos - 未加载库:OS X 10.7 上的 /usr/lib/libncurses.5.4.dylib 错误
- python - 上传的文件不能在烧瓶中重复使用
- ms-access - 如何在 Access 中设置一个按钮来同步从 Access 到 SQL Server 的所有内容?