簡體   English   中英

Spring 批量回滾完整步驟而不是塊方向的當前事務

[英]Spring Batch Rollback full Step instead of current transaction in chunk orientation

我想從文件中讀取項目並將其插入到表中。 為此,我使用FlatFileItemReaderJdbcBatchItemWriter 我在步驟中使用了 Chunk Orientation。 所以我的步驟看起來像這樣。

private Step createPoliciesStep() {
        return stepBuilderFactory.get("CreatePoliciesStep")
                .<PolicyDTO, PolicyDTO>chunk(2)
                .reader(createPoliciesReaderFunc())
                .writer(createPoliciesWriterFunc())
                .listener(createPoliciesWriteListener)
                .listener(createPoliciesStepListener)
                .build();
}

我給的提交間隔是 2。所以每 2 條記錄提交就會發生。 例如,在讀取第 4 條記錄時拋出一些異常。 當時沒有插入第 3 條和第 4 條記錄,那絕對沒問題。 我想回滾我表上的第一條和第二條記錄(在以前的事務中提交)。

我期待的是在Begin交易之前。 步驟之后應commit事務。 在任何異常之間應該回滾整個步驟。

我們有一個簡單的方法,萬一我的下一步失敗了,我可以刪除那些條目。 但我覺得這不是一個好方法。

我嘗試通過添加DataSourceTransactionManager的事務管理器和事務屬性但沒有工作。 添加我的步驟后看起來像這樣

@Bean
PlatformTransactionManager policyTransactionManager(@Qualifier("mysqlDataSource")DataSource dataSource) {
       return new DataSourceTransactionManager(dataSource);
}

private Step createPoliciesStep() {
        log.info("Create Policies Step Initiated ");
        DefaultTransactionAttribute attribute = new DefaultTransactionAttribute();
        attribute.setPropagationBehavior(Propagation.REQUIRED.value());
        attribute.setIsolationLevel(Isolation.DEFAULT.value());
        return stepBuilderFactory.get("CreatePoliciesStep")
                .transactionManager(policyTransactionManager)
                .<PolicyDTO, PolicyDTO>chunk(2)
                .reader(createPoliciesReaderFunc())
                .writer(createPoliciesWriterFunc())
                .listener(createPoliciesWriteListener)
                .transactionAttribute(attribute)
                .listener(createPoliciesStepListener)
                .build();
}

任何人都可以建議一些好的方法來回滾整個步驟。 提前致謝!!!!

Spring 批處理中的事務邊界是圍繞塊而不是步驟定義的。 所以不可能為整個步驟配置一個事務。

您的用例的一個常見模式是添加一個單獨的步驟,該步驟基於上一步的退出狀態(成功或失敗)執行“補償操作”,即回滾您案例中上一步的更改。

暫無
暫無

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

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