如何解决能够通过Crud存储库检索Tasklet中的记录,但是无法在Azure sql表中保存或更新表使用.save / .saveAll
我已经使用spring batch创建了一个tasklet。在execute方法中,我尝试从azure sql db中检索记录,并且能够成功获取列表中的记录。但是当我尝试使用.save /.saveAll更新同一表中的任何行时,该表没有更新并没有引发错误。
@Override
public RepeatStatus execute(StepContribution stepContribution,ChunkContext chunkContext)
throws Exception {
List<PayoutBatch> payoutBatchRecords =
payoutBatchRepository.findByPayoutDate("08101994");
RECORD_COUNT = payoutBatchRecords.size();
recordsPerSlave = recordsPerSlave(RECORD_COUNT);
setBatchID(payoutBatchRecords,recordsPerSlave);
return RepeatStatus.FINISHED;
}
@Transactional
private void setBatchID(List<PayoutBatch> payoutBatchRecords(this is list with table
records,int recordsPerSlave(here 10)) throws
Exception {
for (int i = 0; i < payoutBatchRecords.size(); i++) {
if (i % recordsPerSlave == 0) {
BatchidAutoInc++;
}
batchId = payoutBatchRecords.get(i).getPayoutDate() + "_" + BatchidAutoInc;
payoutBatchRecords.get(i).setBatchId(batchId);
}
try {
payoutBatchRepository.saveAll(payoutBatchRecords);
}
catch (Exception e)
{
log.info("Exception encountered while saving data : {} "+e.getMessage());
throw new PayoutMasterBatchJobException("Error while inserting/updating data ",e);
}
}
这是我的模型课::
@Data
@Entity
@Table(name = "payoutbatchtable")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class PayoutBatch implements Persistable {
@Id
@Column(name = "memuuid")
private String memUUID;
@Column(name = "payout_date")
private String payoutDate;
@Column(name = "payoutid")
private String payoutID;
@Column(name = "jobstatus")
private String status;
@Column(name = "batch_id")
private String batchId;
public PayoutBatch(String memUUID,String payoutDate,String payoutID,String status) {
this.memUUID = memUUID;
this.payoutDate = payoutDate;
this.payoutID = payoutID;
this.status = status;
this.batchId = null;
}
public PayoutBatch() {
}
@Override
public Object getId() {
return memUUID;
}
@Override
public boolean isNew() {
return getId() == null;
}
}
注意::我是否缺少一些注释,或者我编写的代码有任何问题。
解决方法
tasklet将在Spring Batch驱动的事务中执行,因此无需在@Transactional
方法上添加setBatchID
。以下是reference documentation的摘录:
Each call to a Tasklet is wrapped in a transaction.
您需要删除@Transactional
,并确保在步骤中正确设置了要使用的交易管理器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。