springBoot自定義事務管理


1.在springBoot項目中service的實現類可以通過注解@Transactional添加事務

2.可以通過設置包名統一設置事務

3.自定義代碼內設置事務
(1).注入事務管理類

@Resource
PlatformTransactionManager platformTransactionManager;
@Resource
TransactionDefinition transactionDefinition;


(2)使用事務

public void saveAgentCert(BaseCertDto dto) {
SetDtoUtil.initOtherDto(dto);
if (dto.getBaseCerts().size() > 0) {
//手動開啟事務
TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
String certId = null;
String vendorId = dto.getVendorId();
try {
//這里一定要先獲取到主信息certId 再保存代理信息 所以兩個循環
for (BaseCert cert : dto.getBaseCerts()) {
//代理資質資質等級字段,范圍由0-n 前端用於區分代理級別,0代表主資質信息
if (0 == cert.getAgentLevel()) {
List<BaseCertFile> baseCertFiles = cert.getBaseCertFiles();
cert.setBaseCertFiles(null);
//保存授權資質主信息
BaseCertDto dto1 = new BaseCertDto();
dto1.setBaseCert(cert);
save(dto1);
certId = dto1.getBaseCert().getCertId();
String fileCertId = certId;
//保存授權資質文件信息
saveAuthorCertFileInfo(vendorId, baseCertFiles, fileCertId);
}
}

for (BaseCert cert : dto.getBaseCerts()) {
if (0 != cert.getAgentLevel()) {
List<BaseCertFile> baseCertFiles = cert.getBaseCertFiles();
cert.setBaseCertFiles(null);
//保存授權資質代理信息
BaseAgentCertDto baseAgentCertDto = saveAgentCertInfo(certId, cert);
String fileCertId = baseAgentCertDto.getBaseAgentCert().getAgentCertId();
//保存授權資質文件信息
saveAuthorCertFileInfo(vendorId, baseCertFiles, fileCertId);
}
}
//手動提交事務
platformTransactionManager.commit(transactionStatus);//提交
SetDtoUtil.setSuccessDto(dto, "操作成功");
} catch (Exception e) {
//手動回滾事務
platformTransactionManager.rollback(transactionStatus);//最好是放在catch 里面,防止程序異常而事務一直卡在哪里未提交
logger.error(e.getMessage(), e);
SetDtoUtil.setFailDto(dto, "保存失敗", "error");
}
} else {
SetDtoUtil.setFailDto(dto, "", "參數錯誤");
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM