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

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

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

本文介紹了在春季批次的ItemWriter中無法捕獲異常的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在編寫一個Spring批處理過程來將數據集從一個系統遷移到另一個系統。在本例中,這與使用RowMapper實現在將對象移交給ItemWriter之前從查詢構建對象一樣簡單。ItemWriter調用我的DAO上的save方法(定義為接口,由Spring數據處理)

問題是:我對MyItem表有一個唯一的約束,因此保存重復的記錄將導致DataIntegrityViolationException。我曾嘗試在ItemWriter中捕獲它,以允許我記錄沒有導入記錄,但是在執行過程中,它從未進入該catch語句。我也曾嘗試捕獲ExceptionThrowable,但都無濟于事。

據我所知,在我的DAO的”save”方法上有一個@Transactional注釋,我希望在其中發生提交和刷新。Spring Batch會以任何方式改變這個事務嗎?以便@Transactional批注應用于ItemWriter

的‘write’方法

我甚至可以捕獲此類中的異常嗎?

我在下面提供了代碼片段,如果您需要更多信息,請讓我知道。

非常感謝您能提供的任何幫助

ItemWriter

@Component
public class MyItemWriter implements ItemWriter<MyItem> {

    private static final Logger LOG = LoggerFactory.getLogger(MyItemWriter.class);

    @Resource
    private MyItemDao myItemDao;

    @Override
    public void write(List<? extends MyItem> myItems) throws Exception {
        for (MyItem myItem : myItems) {
            try {
                myItemDao.save(myItem);
            } catch (Throwable ex) {
                LOG.warn("Failed to import MyItem: {}: {} ", myItem.getId(), ex.toString());
            }
        }
    }
}

DAO

public interface MyItemDao extends PagingAndSortingRepository<MyItem, Integer> {
    [Custom methods omitted]
}

Spring批量配置

<batch:job id="myImportJob" restartable="true" job-repository="jobRepository">
    <batch:step id="myImportStep" allow-start-if-complete="true">
        <batch:tasklet>
            <batch:chunk reader="myItemReader" writer="myItemWriter" commit-interval="50" />
        </batch:tasklet>
    </batch:step>
</batch:job>

推薦答案

這里有幾點:

    刪除DAO上的@Transactional批注。@Transactional和Spring Batch通常玩得不好。Spring Batch將事務作為框架功能的一部分進行管理,嘗試操作該功能可能會導致意想不到的副作用。
    正如M.Deinum所指出的,您的ItemWriter,因此您的DAO正在參與Spring Batch管理的事務。因此,在事務提交之前,您不會獲得該異常。

考慮上述因素后,您有兩個選擇:

    您可以配置跳過邏輯以跳過引發該異常的記錄。如果您需要記錄項目,可以將SkipListener添加到混合中,以便記錄導致異常的項目。但是,此方法需要付出性能損失,因為拋出異常將導致事務回滾并一次重放一個項目。
    您可以通過ItemProcessor對商品進行過濾點評。這可節省跳過邏輯的性能影響。

您可以在5.1.5節中閱讀有關Spring Batch跳過邏輯的更多信息:http://docs.spring.io/spring-batch/trunk/reference/html/configureStep.html

這篇關于在春季批次的ItemWriter中無法捕獲異常的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:ItemWriter 異常 捕獲 春季
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

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

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

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

運動步數有氧達人2018-06-03

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

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定