# springcloud-alibaba-jdk21 **Repository Path**: heyevan/springcloud-alibaba-jdk21 ## Basic Information - **Project Name**: springcloud-alibaba-jdk21 - **Description**: springcloud 框架 + jdk21 版本 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-20 - **Last Updated**: 2025-12-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springcloud-jar 项目对常用的组件如 @Async,定时任务等进行统一管理,参考文档如下: ## Java 代码规范 1. method 方法名规范 get**() 添加非空校验或直接返回 select**() 所有参数可为空,用于前端接口,同时需防止全表查询 2. concurrent 并发控制 所有 Mysql 修改动作的接口需要加上并发锁或乐观锁 3. 数据库唯一性设置 所有表需设置唯一主键, 通过 delete_time 标识 ## 数据归档 BaseEntity 中新增 archive_status(默认为0), archive_tag 字段 -1: 非归档数据 0: 待归档 1: 归档中 2: 已归档 ## Report 功能 通用的查询和 Excel 导出功能,通过配置基础的 SQL 及字段映射可实现报表功能 ```json { "name": "123", "sql": "select m.* from sys_application_monitor m ", "groupBy": ["m.id"], "returns": [{ "alias": "id", "column": "alias.id", "comment": "主键ID" }, { "alias": "event_type", "column": "alias.event_type", "comment": "业务类型" }] } ``` 通过 name 定位 sql 执行查询后将返回值的映射关系同时传给前端 ## 统一时区设置 系统使用 JVM 默认时区 TimeZone.getDefault() Jackson 反序列化 @JsonFormat 需指定时区 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") ## 统一日志拦截 1. Feign 使用 Okhttp Client, Web 及 feign 统一返回参数格式为 Result 2. Feign 拦截器添加 Caller 信息, 用于Trace 统计调用方 ## 统一参数返回 Dubbo 以及 Http 统一返回格式为 com.liuwei.cloud.common.mvc.Result ## 统一 Feign 鉴权 所有内部请求限制使用 Feign 进行外部调用 请求方:package com.liuwei.spring.cloud.framework.feigns.caller; 提供方:package com.liuwei.spring.cloud.framework.feigns.provider; ## 并发问题 ```java // 1. redisson 分布式锁 // 2. 数据库 version 乐观锁 // 3. updateById 针对整行的更新容易产生并发问题, 业务应当只变更业务相关列 ``` ## mybatis-plus 使用 table join 连接推荐使用别名为 (TableEntity).class.simpleName() join 字段使用 IBatis.joinClassName() 生成类似 WmsPick.create_time 查询条件 1. 默认使用 version 乐观锁 UPDATE sys_application_logs SET id=? WHERE id=? AND version=? AND deleted=0 ✅ updateById, updateBatchById 生效 ❌ updateByWrapper 不生效 UPDATE sys_application_logs SET deleted=1 WHERE id=? AND deleted=0 ✅ remove, removeBatch 生效 ❌ removeByWrapper 不生效 2. 默认使用 deleted 逻辑删除 3. 默认使用 deleted_time 删除时间, 配合使用唯一索引,防止多次删除的情况 ## enum 系统枚举 项目枚举类统一继承 IBaseEnum, 已形成统一 Controller 并且暴露接口供前端使用,简化开发及对接 ## log 使用方式 Monitor 业务监控, 借助 MonitorAppender 实现日志数据格式化 参考格式: #{BizTag}|key1:{value1},key2:{value2}|{备注信息} 其中 bizUid 为关键字, 标识业务属性 参考样例: log.info("#ClientMove|bizUid:{},vin:{002},partNo:{X01-112323}|{}","12312"); ## event 使用方式 System Event 系统事件重试 ## cron 定时任务使用方式 自定义 Bean 继承 AbstractCronSchedule, 用于 job 动态启停及全局异常处理 ## threadpool 线程池 推荐使用 CloudThreadPoolExecutor 封装全局单的异常处理 ## exception 全局异常 Web 全局异常: GlobalExceptionHandler Async 全局异常: AsyncExceptionHandler ## feishu 提醒 一般系统 CheckedException 异常不需要发送飞书消息 异常类型黑名单通过配置名 system.exception.warning.black.class 控制 # Know-How 代码编写 1. Get 请求参数长度限制, 批量查询报错 -> feign 调用尽量使用 post 请求 2. log.debug(JSON.toJSONString(obj)) 回导致大量的 String 对象占用内存的情况