簡體   English   中英

春季:具有RowCallbackHandler的JdbcTemplate.query()是否同時調用processRow()?

[英]Spring: Does JdbcTemplate.query() with a RowCallbackHandler make concurrent calls to processRow()?

Spring文檔將RowCallbackHandler參數指定為“一次提取結果的對象,一次提取一行”。 我看到processRow()每行被調用一次,但是這些調用可以並發嗎?

我正在讓RowCallbackHandler保持狀態,包括建立已處理對象的Collection ,並偶爾提交該Collection以進行進一步處理。 我需要知道是否可以同時修改此Collection ,或者我是否可以相信一次僅發生一個processRow()

真的取決於您。 如果您已看到源代碼, RowCallbackHandler您提供的RowCallbackHandler包裝在RowCallbackHandlerResultSetExtractor適配器類中,然后再次包裝在QueryStatementCallback (原文如此!)。

沒關系,關鍵是:如果將相同的RowCallbackHandler實例傳遞給兩個並發的query()執行,則Spring將在所有這些層中使用相同的對象。 但是,如果您在每次執行query()都創建RowCallbackHandler新實例,那是安全的。

如果我理解您的問題,則一次只顯示1行。 示例代碼來自其結果集提取器,后者調用此接口。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM