Spring:带有RowCallbackHandler的JdbcTemplate.query()是否会对processRow()进行并发调用?

时间:2011-06-22 18:56:19

标签: java spring concurrency

Spring将specify RowCallbackHandler参数作为“将提取结果的对象,一次一行”。我看到每行调用processRow()一次,但这些调用可以并发吗?

我正在使用RowCallbackHandler维护状态,包括构建Collection个已处理对象,并偶尔提交该集合以进行进一步处理。我需要知道是否可以同时修改此Collection,或者我是否可以信任一次只发生一个processRow()

2 个答案:

答案 0 :(得分:3)

这完全取决于你。如果您已经看过源代码,那么您提供的RowCallbackHandler包含在RowCallbackHandlerResultSetExtractor适配器类中,然后再次包装在QueryStatementCallback中(原文如此!)。

没关系,重点是:如果将同一RowCallbackHandler实例传递给两个并发query()执行,Spring将在所有这些层中使用相同的对象。但是如果你每RowCallbackHandler次执行query()创建一个新实例,那么你就是安全的。

答案 1 :(得分:0)

如果我理解你的问题,那么它一次只能排一行。示例代码来自调用此接口的结果集提取器。

while (rs.next()) {
   this.rch.processRow(rs);
}