使用SpringBatch:我想将所有块项目发布到另一个存储库(某种消息队列)。但在发布它们之前,我需要确保事务正确成功(我的Writer是一个JPA存储库)。
我知道有
ItemWriteListener
接口和
void afterWrite(Chunk items)
但此方法在事务结束前调用
我知道还有
ChunkListener
接口和
void afterChunk(ChunkContext context)
方法这很好,因为
afterChunk(ChunkContext context)
在事务结束后调用。
不幸的是
ChunkContext
对象不提供对块项目的访问权限。
我在想这个混合解决方案
ItemWriteListener
和
ChunkListener
这是一个好方法吗?
我在这里使用一个临时列表来存储区块中的所有项目
public class ItemListener implements ItemWriteListener<Object> {
public List<Object> list = new ArrayList<>();
public void afterWrite(Chunk<? extends Object> items) {
list.clear();
list.addAll(items.getItems());
}
public List<Object> getList() {
return List.copyOf(list);
}
}
然后我使用前面包含项目的列表:
public class ChunkListenerImpl implements ChunkListener {
private ItemListener itemListener;
public ChunkListenerImpl(ItemListener itemListener) {
this.itemListener = itemListener;
}
public void afterChunk(ChunkContext context) {
itemListener.getList().forEach(item -> {
apiClient.publish(item);
});
}
}