Spring将specify RowCallbackHandler
参数作为“将提取结果的对象,一次一行”。我看到每行调用processRow()
一次,但这些调用可以并发吗?
我正在使用RowCallbackHandler
维护状态,包括构建Collection
个已处理对象,并偶尔提交该集合以进行进一步处理。我需要知道是否可以同时修改此Collection
,或者我是否可以信任一次只发生一个processRow()
。
答案 0 :(得分:3)
这完全取决于你。如果您已经看过源代码,那么您提供的RowCallbackHandler
包含在RowCallbackHandlerResultSetExtractor
适配器类中,然后再次包装在QueryStatementCallback
中(原文如此!)。
没关系,重点是:如果将同一RowCallbackHandler
实例传递给两个并发query()
执行,Spring将在所有这些层中使用相同的对象。但是如果你每RowCallbackHandler
次执行query()
创建一个新实例,那么你就是安全的。
答案 1 :(得分:0)
如果我理解你的问题,那么它一次只能排一行。示例代码来自调用此接口的结果集提取器。
while (rs.next()) {
this.rch.processRow(rs);
}