春季:如何在for循环中重新启动事务?

时间:2019-12-04 17:47:47

标签: spring-data-jpa spring-batch

我有一个Spring Batch应用程序,在write步骤中,该程序循环遍历要插入到Postgres数据库中的记录。我们不时地在循环中得到一个DuplicateKeyException,但是不希望整个工作失败。我们记录该记录,并希望继续插入以下记录。

但是一旦遇到异常,事务将变成“错误”,并且Postgres将不再接受任何命令,如in this excellent post所述。所以我的问题是,重新启动事务的最佳方法是什么?同样,我不会重试失败的记录-我只想在下一个记录中继续循环。

这是我的工作配置xml的一部分:

<batch:job id="portHoldingsJob">
    <batch:step id="holdingsStep">
        <tasklet throttle-limit="10">
             <chunk reader="PortHoldingsReader"  processor="PortHoldingsProcessor" writer="PortHoldingsWriter" commit-interval="1" />
        </tasklet>
    </batch:step>
    <batch:listeners>
        <batch:listener ref="JobExecutionListener"/>
    </batch:listeners>
</batch:job>

感谢您的输入!

1 个答案:

答案 0 :(得分:1)

不确定是否使用Spring交易注释来管理交易...如果可以的话,您可以尝试。


Model: "model"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_1 (InputLayer)            [(None, 224, 224, 3) 0                                            
__________________________________________________________________________________________________
Conv1_pad (ZeroPadding2D)       (None, 225, 225, 3)  0           input_1[0][0]                    
__________________________________________________________________________________________________
Conv1 (Conv2D)                  (None, 112, 112, 32) 864         Conv1_pad[0][0]                  
__________________________________________________________________________________________________
bn_Conv1 (BatchNormalization)   (None, 112, 112, 32) 128         Conv1[0][0]                      
__________________________________________________________________________________________________
Conv1_relu (ReLU)               (None, 112, 112, 32) 0           bn_Conv1[0][0]                   
__________________________________________________________________________________________________
expanded_conv_depthwise (Depthw (None, 112, 112, 32) 288         Conv1_relu[0][0]                 
__________________________________________________________________________________________________
expanded_conv_depthwise_BN (Bat (None, 112, 112, 32) 128         expanded_conv_depthwise[0][0]    
__________________________________________________________________________________________________
expanded_conv_depthwise_relu (R (None, 112, 112, 32) 0           expanded_conv_depthwise_BN[0][0] 
__________________________________________________________________________________________________
expanded_conv_project (Conv2D)  (None, 112, 112, 16) 512         expanded_conv_depthwise_relu[0][0
__________________________________________________________________________________________


< snip for brevity >

________
block_16_project (Conv2D)       (None, 7, 7, 320)    307200      block_16_depthwise_relu[0][0]    
__________________________________________________________________________________________________
block_16_project_BN (BatchNorma (None, 7, 7, 320)    1280        block_16_project[0][0]           
__________________________________________________________________________________________________
Conv_1 (Conv2D)                 (None, 7, 7, 1280)   409600      block_16_project_BN[0][0]        
__________________________________________________________________________________________________
Conv_1_bn (BatchNormalization)  (None, 7, 7, 1280)   5120        Conv_1[0][0]                     
__________________________________________________________________________________________________
dropout (Dropout)               (None, 112, 112, 32) 0           expanded_conv_depthwise_BN[0][0] 
__________________________________________________________________________________________________
out_relu (ReLU)                 (None, 7, 7, 1280)   0           Conv_1_bn[0][0]                  
__________________________________________________________________________________________________
regression_pooling (GlobalAvera (None, 32)           0           dropout[0][0]                    
__________________________________________________________________________________________________
embedding_pooling (GlobalAverag (None, 1280)         0           out_relu[0][0]                   
__________________________________________________________________________________________________
cinemanet_output (Dense)        (None, 30)           990         regression_pooling[0][0]         
==================================================================================================
Total params: 2,258,974
Trainable params: 990
Non-trainable params: 2,257,984

希望有帮助。

Spring Batch中没有明确指定回滚异常

   @Transactional(noRollbackFor = DuplicateKeyException.class)