第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在面向讀寫(xiě)塊的過(guò)程中,Spring Batch 在哪里提交?

在面向讀寫(xiě)塊的過(guò)程中,Spring Batch 在哪里提交?

不負(fù)相思意 2021-06-21 18:01:44
在我的 java 項(xiàng)目中,我有一個(gè)使用 Spring boot 的面向塊的讀取 ( FlatFileItemReader) - 寫(xiě)入 ( JdbcBatchItemWriter) 過(guò)程。使用HikariCp數(shù)據(jù)源。查看 Spring 批處理 jdbc 編寫(xiě)器,我們可以找到該部分:               //some code                @Override                public int[] doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException {                    for (T item : items) {                        itemPreparedStatementSetter.setValues(item, ps);                        ps.addBatch();                    }                    return ps.executeBatch();                }              //some code所以基本上在這里,如果我的 Hikari 數(shù)據(jù)源的setAutocommit參數(shù)為true,則意味著在ps.executeBatch()我的數(shù)據(jù)庫(kù)將被更新之后。這里的第一個(gè)問(wèn)題是,PreparedStatement.executeBatch() 它究竟是如何處理的?它是提交每個(gè) sql 語(yǔ)句還是在每個(gè) sql 語(yǔ)句的末尾?在該情況下,setAutocommit參數(shù)是假的,之后ps.executeBatch()它不應(yīng)該被更新。由于 Spring 批處理應(yīng)該管理事務(wù)等提交。我試圖找到它在哪里提交以便更好地理解我遇到的問(wèn)題。展望ChunkOrientedTasklet,SimpleChunkProcessor和TransactionTemplate我找不到在哪里的過(guò)程中它的承諾。所以我的第二個(gè)問(wèn)題是,Spring 批處理在面向塊的過(guò)程中究竟在哪里提交?編輯:使用 Spring 批處理 3.0.7編輯:似乎已處理AbstractPlatformTransactionManager.processCommit(DefaultTransactionStatus status)但仍然無(wú)法理解。
查看完整描述

2 回答

?
森林海

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊

您的自動(dòng)提交參數(shù)無(wú)關(guān)緊要,Spring 將管理事物并在它認(rèn)為合適時(shí)覆蓋它(它確實(shí)認(rèn)為合適)。

您可以設(shè)置提交間隔來(lái)定義您想要提交的頻率。

您是否應(yīng)該更改它完全取決于您打算如何批處理,您的執(zhí)行是否會(huì)失敗,是否應(yīng)該跳過(guò)或重試這些情況以及其他類似的事情。


查看完整回答
反對(duì) 回復(fù) 2021-06-23
?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊

關(guān)于“什么時(shí)候提交?”的問(wèn)題,根據(jù)Spring Batch 文檔

5.1 面向塊的處理

Spring Batch 在其最常見(jiàn)的實(shí)現(xiàn)中使用“面向塊的”處理風(fēng)格。面向塊的處理是指在事務(wù)邊界內(nèi)一次讀取一個(gè)數(shù)據(jù),并創(chuàng)建將被寫(xiě)出的“塊”。從 ItemReader 讀入一項(xiàng),交給 ItemProcessor 并聚合。一旦讀取的項(xiàng)數(shù)等于提交間隔,則通過(guò) ItemWriter 寫(xiě)出整個(gè)塊,然后提交事務(wù)。

http://img1.sycdn.imooc.com//60d3054400016d8805900322.jpg

下面是上述相同概念的代碼表示:


List items = new Arraylist();

for(int i = 0; i < commitInterval; i++){

    Object item = itemReader.read()

    Object processedItem = itemProcessor.process(item);

    items.add(processedItem);

}

itemWriter.write(items);

因此,如果你打算使用 Spring Batch,你不應(yīng)該搞亂設(shè)置自動(dòng)提交,因?yàn)檫@是你應(yīng)該信任框架為你處理的事情。下面的部分顯示了如何配置的示例:


5.1.1 配置步驟


盡管 Step 所需的依賴項(xiàng)列表相對(duì)較短,但它是一個(gè)極其復(fù)雜的類,可能包含許多協(xié)作者。為了簡(jiǎn)化配置,可以使用 Spring Batch 命名空間:


<job id="sampleJob" job-repository="jobRepository">

    <step id="step1">

        <tasklet transaction-manager="transactionManager">

            <chunk reader="itemReader" writer="itemWriter" commit-interval="10"/>

        </tasklet>

    </step>

</job>

上面的配置表示創(chuàng)建面向項(xiàng)目的步驟所需的唯一依賴項(xiàng):


reader - 提供待處理項(xiàng)目的 ItemReader。


writer - 處理 ItemReader 提供的項(xiàng)目的 ItemWriter。


事務(wù)管理器 - Spring 的 PlatformTransactionManager 將用于在處理期間開(kāi)始和提交事務(wù)。


job-repository - JobRepository 將用于在處理期間(就在提交之前)定期存儲(chǔ) StepExecution 和 ExecutionContext。對(duì)于內(nèi)聯(lián)(在 a 中定義的),它是元素上的一個(gè)屬性;對(duì)于獨(dú)立步驟,它被定義為 .


commit-interval - 在提交事務(wù)之前將處理的項(xiàng)目數(shù)。


查看完整回答
反對(duì) 回復(fù) 2021-06-23
  • 2 回答
  • 0 關(guān)注
  • 208 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)