mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	优化 error-code 加载逻辑,失败不影响启动
This commit is contained in:
		@@ -49,8 +49,12 @@ public class ErrorCodeAutoGeneratorImpl implements ErrorCodeAutoGenerator {
 | 
			
		||||
        log.info("[execute][解析到错误码数量为 ({}) 个]", autoGenerateDTOs.size());
 | 
			
		||||
 | 
			
		||||
        // 第二步,写入到 system 服务
 | 
			
		||||
        errorCodeApi.autoGenerateErrorCodeList(autoGenerateDTOs);
 | 
			
		||||
        log.info("[execute][写入到 system 组件完成]");
 | 
			
		||||
        try {
 | 
			
		||||
            errorCodeApi.autoGenerateErrorCodeList(autoGenerateDTOs);
 | 
			
		||||
            log.info("[execute][写入到 system 组件完成]");
 | 
			
		||||
        } catch (Exception ex) {
 | 
			
		||||
            log.error("[execute][写入到 system 组件失败({})]", ExceptionUtil.getRootCauseMessage(ex));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -21,4 +21,14 @@ public interface ErrorCodeLoader {
 | 
			
		||||
        ServiceExceptionUtil.put(code, msg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 刷新错误码
 | 
			
		||||
     */
 | 
			
		||||
    void refreshErrorCodes();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 加载错误码
 | 
			
		||||
     */
 | 
			
		||||
    void loadErrorCodes();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
package cn.iocoder.yudao.framework.errorcode.core.loader;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.collection.CollUtil;
 | 
			
		||||
import cn.hutool.core.exceptions.ExceptionUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.errorcode.ErrorCodeApi;
 | 
			
		||||
import cn.iocoder.yudao.module.system.api.errorcode.dto.ErrorCodeRespDTO;
 | 
			
		||||
@@ -8,6 +9,7 @@ import lombok.RequiredArgsConstructor;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
 | 
			
		||||
import org.springframework.context.event.EventListener;
 | 
			
		||||
import org.springframework.scheduling.annotation.Async;
 | 
			
		||||
import org.springframework.scheduling.annotation.Scheduled;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
@@ -43,31 +45,38 @@ public class ErrorCodeLoaderImpl implements ErrorCodeLoader {
 | 
			
		||||
     */
 | 
			
		||||
    private LocalDateTime maxUpdateTime;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    @EventListener(ApplicationReadyEvent.class)
 | 
			
		||||
    @Async // 异步,保证项目的启动过程,毕竟非关键流程
 | 
			
		||||
    public void loadErrorCodes() {
 | 
			
		||||
        this.loadErrorCodes0();
 | 
			
		||||
        loadErrorCodes0();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    @Scheduled(fixedDelay = REFRESH_ERROR_CODE_PERIOD, initialDelay = REFRESH_ERROR_CODE_PERIOD)
 | 
			
		||||
    public void refreshErrorCodes() {
 | 
			
		||||
        this.loadErrorCodes0();
 | 
			
		||||
        loadErrorCodes0();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void loadErrorCodes0() {
 | 
			
		||||
        // 加载错误码
 | 
			
		||||
        List<ErrorCodeRespDTO> errorCodeRespDTOs = errorCodeApi.getErrorCodeList(applicationName, maxUpdateTime);
 | 
			
		||||
        if (CollUtil.isEmpty(errorCodeRespDTOs)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        log.info("[loadErrorCodes0][加载到 ({}) 个错误码]", errorCodeRespDTOs.size());
 | 
			
		||||
        try {
 | 
			
		||||
            // 加载错误码
 | 
			
		||||
            List<ErrorCodeRespDTO> errorCodeRespDTOs = errorCodeApi.getErrorCodeList(applicationName, maxUpdateTime);
 | 
			
		||||
            if (CollUtil.isEmpty(errorCodeRespDTOs)) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            log.info("[loadErrorCodes0][加载到 ({}) 个错误码]", errorCodeRespDTOs.size());
 | 
			
		||||
 | 
			
		||||
        // 刷新错误码的缓存
 | 
			
		||||
        errorCodeRespDTOs.forEach(errorCodeRespDTO -> {
 | 
			
		||||
            // 写入到错误码的缓存
 | 
			
		||||
            putErrorCode(errorCodeRespDTO.getCode(), errorCodeRespDTO.getMessage());
 | 
			
		||||
            // 记录下更新时间,方便增量更新
 | 
			
		||||
            maxUpdateTime = DateUtils.max(maxUpdateTime, errorCodeRespDTO.getUpdateTime());
 | 
			
		||||
        });
 | 
			
		||||
            // 刷新错误码的缓存
 | 
			
		||||
            errorCodeRespDTOs.forEach(errorCodeRespDTO -> {
 | 
			
		||||
                // 写入到错误码的缓存
 | 
			
		||||
                putErrorCode(errorCodeRespDTO.getCode(), errorCodeRespDTO.getMessage());
 | 
			
		||||
                // 记录下更新时间,方便增量更新
 | 
			
		||||
                maxUpdateTime = DateUtils.max(maxUpdateTime, errorCodeRespDTO.getUpdateTime());
 | 
			
		||||
            });
 | 
			
		||||
        } catch (Exception ex) {
 | 
			
		||||
            log.error("[loadErrorCodes0][加载错误码失败({})]", ExceptionUtil.getRootCauseMessage(ex));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user