我必须像这样配置批处理作业流。
XML文件阅读器-
我的定制处理器是这样的
public class MyCompositeProcessor implements ItemProcessor<MySource, MyCompositeResult> {
@Override
public MyCompositeResult process(MySource item) throws Exception {
MyResult1 result1 = myProcessor1.process(item);
MyResult2 result2 = myProcessor2.process(result1);
return MyCompositeResult(result1, result2);
}
}
public class MyCompositeWriter implements ItemWriter<MyCompositeResult> {
@Override
public void write(List<? extends MyCompositeResult> items) throws Exception {
myWriter1.write(item.getResult1());
myWriter2.write(item.getResult2());
}
}
这是一个好的方法吗?我看到了一些CompositeProcess、CompositeWriter的例子,但没有一个适合我的案例。
提前谢谢。
如果我理解正确,您的要求如下:
item reader → item processor 1 → item processor 2
↓ ↓
item writer 1 item writer 2
复合项处理器/写入器路由在您的情况下不起作用,因为它类似于:
item reader → composite item processor → composite item writer
(processor 1 → processor 2) (writer 1 → writer 2)
这不是你想要的。您的需求是特定的,您需要一个定制的ChunkProcessor
实现,特别是一个复合块处理器:
item reader → chunk processor 1 → chunk processor 2
(item processor 1) (item processor 2)
( ↓ ) ( ↓ )
(item writer 1 ) (item writer 2 )
关于文章Spring批处理CompositeItemWriter如何管理委托编写器的事务?,对于复合项编写器事务管理,难道不应该将数据源包装在如下所示的事务管理器中吗?没有下面的bean定义,事务管理就无法与Oracle和Hikari CP一起工作。不确定帖子中提供的示例是如何工作的。请澄清
我目前正在编写一个Spring批处理,其中我正在读取一个数据块,并对其进行处理,然后我希望将此数据传递给两个Writer。一个writer将简单地更新数据库,而第二个writer将写入csv文件。 我计划编写自己的自定义编写器,并在customItemWriter中注入这两个ItemWriter,并在customItemWriter的write方法中调用这两个ItemWrite的write方法。这
在我的Spring boot和Spring batch应用程序中,我有这样一个步骤: 我的作家是一个空的,如下所示: 现在,在我的处理器中,我有: 问题:由于所有对象都传递给处理器,我可以在处理器本身中处理它们,而不是使用任何转换等,因为我的目的通过使用处理器来解决,这是一个好的做法吗?或者我必须使用作家/自定义作家来完成工作?
我有一个批处理步骤 读取器和处理器流程如何工作?读取器是读取块并等待处理器处理它,还是一次读取所有块。
关于skip,我有一个非常基本的问题。我正在使用spring示例提供的spring batch simple cli项目,并试图理解跳过行为。它有一个非常基本的示例读取器,可以读取字符串数组(我将其修改为从Hellowworld 1到Hellowworld 10的10个字符串列表中读取),还有一个基本的编写器,可以登录到控制台。writer抛出java。每写一次都有例外。我在作业配置中增加了4个跳
事务在Spring批处理中未回滚。我有意抛出异常来测试事务回滚。即使从项目编写器引发异常,数据库事务也在提交。下面是写入器中保存到DB中的方法。对象是注入到此类中的 jpa 存储库 我尝试用@Transactional(传播=Propagation.REQUIRES_NEW, rollbackFor=Exception.class)标记上述方法的事务,但它仍然在提交事务。我肯定我错过了一些东西。任