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