簡體   English   中英

Spring 引導:@Transactional rollbackFor 檢查異常

[英]Spring Boot: @Transactional rollbackFor checked Exception

當我從“ invokeProcedureForLead ”方法(下面提到的代碼)中獲得檢查異常時,我正在嘗試實現事務回滾。 我嘗試了多種方法,但一些參考仍然對我不起作用。

如需更多了解,請查看以下代碼

@Transactional(rollbackFor = Exception.class)
    public LeadResponseDTO processDataInDB(LMCRAResponseData lmcraResponse,
            Boolean crnPresentFlag, Map<Integer, Integer> craProcData,
            Map<Integer, Integer> crnProcData,LeadResponseDTO leadResponseDTO,LMCRARequestData lmcraRequestData) throws CRAProcessDBException,SQLException, CRAProcessClientException {
        try{
        leadResponseDTO = extractDecision(lmcraResponse,crnPresentFlag);
        
        decisionEngineResponseDao.invokeProceduresForLead(craProcData, crnProcData, lmcraResponse);
        
        }catch(Exception e){
              
        log.error("error in invokeProcCalls", e);
        if (masterErrorCodes.getErrorDTO("6006") != null)
            logException(lmcraResponse, masterErrorCodes.getErrorDTO("6006"));
         leadResponseDTO=new LeadResponseDTO(); 
         getLeadResponseDTO(lmcraRequestData,leadResponseDTO,e.getMessage());
        
    
        
        }       
    
        return leadResponseDTO;
    }



public void invokeProceduresForLead(Map<Integer, Integer> craProcData,
            Map<Integer, Integer> crnProcData, LMCRAResponseData lmcraResponseData) throws   Exception  {
        int noCRNFlag = 0;
        String commonLogs = CommonUtil.printDECommonLogs(lmcraResponseData);
    
        if (lmcraResponseData.isBureauMatch() && crnProcData.isEmpty())
            noCRNFlag = 1;

        
        if (lmcraResponseData.isBureauMatch()
                && invokeProcLeads(craProcData, DBConstants.CALL_PROC_PROCESS_CRA_DATA_LEAD,
                        Integer.parseInt(lmcraResponseData.getCaseID())) != null) {
            log.info("invokeProcLeads for Cra block - 1 for runId {} " , commonLogs);
            throw new CRAProcessDBException("error in invokeProcCalls for CRA");
            
            
        }
        if (crnProcData != null
                && !crnProcData.isEmpty()
                && invokeProcLeads(crnProcData, DBConstants.CALL_PROC_PROCESS_CRN_DATA_LEAD,
                        Integer.parseInt(lmcraResponseData.getCaseID())) != null) {
            log.info("invokeProcLeads for crn  block - 2 for runId {} " , commonLogs);
            throw new CRAProcessDBException("error in invokeProcCalls for CRN");
            
        }
        if (((crnProcData == null || crnProcData.isEmpty()) || !lmcraResponseData.isBureauMatch())
                && invokeNoCrnForLeads(DBConstants.CALL_PROC_PROCESS_NO_CRN_DATA_LEAD,
                        Integer.parseInt(lmcraResponseData.getCaseID()), noCRNFlag) != null) {
            log.info("invokeNoCrnForLeads block - 3 for runId {} " , commonLogs);
            throw new CRAProcessDBException("error in invokeProcCalls for NOCRN");
            
            
        }

我認為代碼需要像這樣更改-

log.error("error in invokeProcCalls", e);

if (masterErrorCodes.getErrorDTO("6006") != null)

logException(lmcraResponse, masterErrorCodes.getErrorDTO("6006"));

LeadResponseDTO=新的 LeadResponseDTO(); getLeadResponseDTO(lmcraRequestData,leadResponseDTO,e.getMessage());

}

扔 e;

注意 **throw e; ** 行添加..

問題是您從內部調用中拋出異常,然后在外部方法中將其吞下。 所以外部方法永遠不會拋出異常,從而不會發生回滾。

暫無
暫無

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

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