代码之家  ›  专栏  ›  技术社区  ›  AntonBoarf

Spring Batch:如何在事务提交后获取chunk的项?

  •  0
  • AntonBoarf  · 技术社区  · 2 年前

    使用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);
        });
    }
    

    }

    0 回复  |  直到 2 年前