亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了Spring Batch ItemReader列表僅處理一次的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在嘗試使用ListItemReader<String>ItemProcessor<String, String>ItemWriter<String>創(chuàng)建Spring批處理作業(yè)。

XML如下所示

<job id="sourceJob" xmlns="http://www.springframework.org/schema/batch">
    <step id="step1" next="step2">
        <tasklet>
            <chunk reader="svnSourceItemReader" 
                processor="metadataItemProcessor" 
                writer="metadataItemWriter" 
                commit-interval="1" />
        </tasklet>
    </step>
    <step id="step2">
        <tasklet ref="lastRevisionLoggerTasklet"></tasklet>
    </step>
</job>

<bean id="svnSourceItemReader" 
        class="com.example.repository.batch.SvnSourceItemReader" 
        scope="prototype">
    <constructor-arg index="0">
        <list>
            <value>doc1.xkbml</value>
            <value>doc2.xkbml</value>
            <value>doc3.xkbml</value>
        </list>
    </constructor-arg>
</bean>

<bean id="metadataItemProcessor" 
        class="com.example.repository.batch.MetadataItemProcessor" 
        scope="prototype" />

<bean id="metadataItemWriter" 
        class="com.example.repository.batch.MetadataItemWriter" 
        scope="prototype" />

閱讀器、處理器和寫入器都是普通的

public class SvnSourceItemReader extends ListItemReader<String> {

    public SvnSourceItemReader(List<String> list) {
        super(list);
        System.out.println("Reading data list " + list);
    }

    @Override
    public String read() {
        String out = (String) super.read();
        System.out.println("Reading data " + out);
        return out;
    }

}

public class MetadataItemProcessor implements ItemProcessor<String, String> {

    @Override
    public String process(String i) throws Exception {
        System.out.println("Processing " + i + " : documentId " + documentId);
        return i;
    }

}

public class MetadataItemWriter implements ItemWriter<String> {

    @Override
    public void write(List<? extends String> list) throws Exception {
        System.out.println("Writing " + list);
    }

}

作業(yè)按如下方式啟動,但按計劃每10秒啟動一次。

long nanoBits = System.nanoTime() % 1000000L;
if (nanoBits < 0) {
    nanoBits *= -1;
}
String dateParam = new Date().toString() + System.currentTimeMillis() 
        + "." + nanoBits;
param = new JobParametersBuilder().addString("date", dateParam)
        .toJobParameters();
JobExecution execution = jobLauncher.run(job, param);

應(yīng)用程序啟動時,我看到它讀取、處理和寫入傳遞給讀取器的列表中的三個項目。

Reading data doc1.xkbml
Processing doc1.xkbml : documentId doc1
Writing [doc1.xkbml]
Reading data doc2.xkbml
Processing doc2.xkbml : documentId doc2
Writing [doc2.xkbml]
Reading data doc3.xkbml
Processing doc3.xkbml : documentId doc3
Writing [doc3.xkbml]

因為此sourceJob使用的是計劃計時器,所以我預(yù)計每隔10秒就會看到該列表被處理,但實際上我看到的是所有后續(xù)運行。

Reading data null

有人知道為什么會發(fā)生這種情況嗎?我是Spring Batch的新手,對這個問題就是摸不著頭腦。

謝謝/w

推薦答案

問題是您將讀者標記為scope="prototype"。應(yīng)為scope="step"

Spring-Batch中只有兩個作用域:singleton(默認值)和step

來自javadoc:

StepScope
步驟上下文的范圍。此范圍內(nèi)的對象使用
Spring容器作為對象工廠,因此只有一個實例
這樣的bean的每個執(zhí)行步驟。此作用域中的所有對象都
(不需要修飾Bean定義)。

需要使用STEP作用域才能使用后期綁定,因為
在步驟開始之前,bean實際上不能被實例化,這
允許查找屬性。

在Spring上下文啟動期間,請查看日志,您將看到以下行:

信息:已從類路徑資源執(zhí)行完SQL腳本
9毫秒[org/springframework/batch/core/schema-hsqldb.sql]。
讀取數(shù)據(jù)列表[doc1.xkbml,doc2.xkbml,doc3.xkbml]

如您所見,您的讀取器已經(jīng)作為單例創(chuàng)建和管理;Spring-Batch上下文中的動態(tài)bean應(yīng)該使用特殊的step范圍進行管理,以便Spring將在每次執(zhí)行步驟時創(chuàng)建bean的新副本。

在您的閱讀器中,ListItemReader.read()寫為:

public T read() {
  if (!list.isEmpty()) {
    return list.remove(0);
  }
  return null;
}

從原始列表中刪除每個已讀項目!讀取器構(gòu)建一次,在第二次執(zhí)行作業(yè)時,列表為空!

這篇關(guān)于Spring Batch ItemReader列表僅處理一次的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:Batch ItemReader Spring 列表
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定