Spring Batch中的地图项目读取器?

时间:2018-06-21 16:46:33

标签: java spring spring-batch

我有一个简单的HashMap,似乎无法将它传递给Spring Batch的任何标准ItemReader,这让我感到非常沮丧。我是否需要编写自己的项目读取器才能处理HashMap还是缺少某些内容?

2 个答案:

答案 0 :(得分:1)

这取决于您的物品是什么:键,值或地图条目。

您可以使用ListItemReader并在其构造函数中将键,值或条目作为列表传递。例如:

Map<Integer, String> items = new HashMap<>();
items.put(1, "foo");
items.put(2, "bar");

ListItemReader<Integer> keysItemReader = new ListItemReader<>(new ArrayList<>(items.keySet()));
ListItemReader<String> valuesItemReader = new ListItemReader<>(new ArrayList<>(items.values()));
ListItemReader<Map.Entry<Integer, String>> entriesItemReader = new ListItemReader<>(new ArrayList<>(items.entrySet()));

您还可以使用IteratorItemReader并将项目上的迭代器传递给构造函数中的迭代器:

IteratorItemReader<Map.Entry<Integer, String>> iteratorItemReader = new IteratorItemReader<>(items.entrySet().iterator());
// same for keys or values

答案 1 :(得分:0)

春季批处理中没有MapReader。我们在项目中所做的是创建common-batch模块,以使Spring Batch核心组件中缺少那些额外的实用程序读取器和写入器。 那将是跨应用程序的最佳和良好的可重用方式。