Java后端工程化经验总结
2021-10-01 02:02:30 1 举报
AI智能生成
Java后端开发工程化经验总结
作者其他创作
大纲/内容
IntelliJ IDEA设置
插件
阿里巴巴编程规范 Alibaba Java Coding Guidelines
File Header
设置路径
Settings - File and Code Templates - includes - File Header
图示
分支主题
要求
设置@author和@since,名称可以用姓名简称、姓名全称、姓名,建议用英文
分支主题
修改别人代码时,添加第二行@author,填写自己的名字
分支主题
从网上找来的代码,也应该标注通过@author标出添加人,通过@link标出参考链接
分支主题
需要标识版本号采用@version/@since
JavaDoc Wikipedia
分支主题
Coding Style
设置路径
Settings - Editor - Code style - Java
Tab size/Indent: 4
Keep indents on empty lines勾上
图示
分支主题
编码习惯
写完时习惯性格式化,优化导包
搜索知道当前设置下的快捷键,默认为CTRL+ALT+L),导包优化(CTRL+ALT+O)
分支主题
分支主题
工程化
工程目录
|-src<br> |- main<br> |— java<br> |— com.xxxx.xx<br> |— business<br> |— first // 按业务功能分包命名,一个大模块对应一个包<br> |— controller // 一个页面对应一个controller<br> |— dao<br> |— entity<br> |— converter // mapstruct converters<br> |— bo // 提供给前端的接口的入参,XxxParam(单数)<br> |— po // 数据库表对应实体类包,XxxPO<br> |— mo // 多表join映射成的实体类包,XxxMO(按需)<br> |— vo // 接口的返回参数,XxxRt<br> |— service // 业务service包<br> |— impl // 业务service实现包<br> |— mpservice // MyBatis-Plus service包<br> |— impl // MyBatis-Plus service实现包<br> |— openapi // 公共服务包,汇总供其他微服务远程调用的接口<br> |— controller<br> |— dao<br> |— entity<br> |— converter <br> |— dto // 提供远程调用的接口的入参,XxxDTO<br> |— po <br> |— vo<br> |— service<br> |— impl<br> |— mpservice <br> |— impl <br> |— common<br> |— advice // 全局异常处理类<br> |— annotation // 自定义注解<br> |— aop // AOP记录类<br> |— configure // 配置类<br> |— feign // Feign远程调用<br> |— util // 工具类<br> |- resources<br> |- sql // 项目SQL文件最新版本<br> |- structure.sql // 表结构SQL语句<br> |- data.sql // 字典表及工程正常运行所需要的数据<br> |- db.sql // 建数据库、用户名及密码的SQL语句<br> |- db <br> |- migrations // SQL变更版本文件汇总<br> |- mapper<br> |- application.yml<br> |- application-xxx.yml<br>|- pom.xml<br>|- .gitignore // 提示Git忽略哪些文件<br>|- ci // ci检查<br>|- .gitlab-ci.yml // Gitlab ci配置
业务实体类
bo
XxxParam
前台业务接口接参类
po
XxxPO
与数据库交互的实体类
dto
XxxDTO
作为公共服务提供出去的接参类
vo
XxxRt
返回值类
ORM框架
用什么?
Spring Data JPA
MyBatis
MyBatis-Plus
MyBatis-Plus
业务开发,单表操作,尽可能基于Mybatis-Plus的service层,其具备mapper层的全部功能,相关接口对比见链接
https://baomidou.com/guide/crud-interface.html#service-crud-%E6%8E%A5%E5%8F%A3
https://baomidou.com/guide/crud-interface.html#mapper-crud-%E6%8E%A5%E5%8F%A3
简单的join操作,考虑替换为多次单表的查询,主表查询出查询采用eq/in,复杂的join考虑采用建立视图来处理;列表查询尽可能一次in查询全部相关数据,在业务逻辑里匹配列表数据与其他相关的数据之间的关系。
需要批量格式化后插入/更新数据库记录的场景,在循环中格式化出PO类,添加到集合,最后调用Mybatis-Plus service层的批量插入/更新接口。不要在循环里直接用BaseMapper接口执行insert,循环插入/更新数据库。
MapStruct
PO转VO
BO/DTO转PO
List<XxxPO>转List<XxxRt>;
Page<XxxBO>转Page<XxxPO>;
Knife4j(自动化接口文档)
Swagger注解
数据库索引
声明为primary key / unique的列自带索引;
与主表关联的字段加上索引;
条件查询按机构/用户查询的时候,表的org_id/user_id列加上索引。
索引命名idx_xxx
Example
-- 在机构id字段上新建索引<br>alter table tab_xxx add index idx_org_id(org_id) comment '机构id索引';
-- 新建机构id-创建时间联合索引<br>alter table tab_xxx add index idx_org_id_time(org_id, create_time) comment '机构id-创建时间索引';
JVM配置参数
#/bin/bash<br>nohup java -jar -Xmx256m -Xms256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:MaxTenuringThreshold=6 -XX:+ExplicitGCInvokesConcurrent -XX:+ParallelRefProcEnabled -Xloggc:./logs/{SERVICE_NAME}-gc.log -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs/{SERVICE_NAME}-gc.hprof -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 -Dfile.encoding=UTF-8 -Duser.timezone=GMT+08 -Dspring.profiles.active=test /data/jenkins/xxxxxxx/service-xxxx-xxx.jar >/dev/null 2>&1 &
总体原则
尽可能消除消除IDEA右侧的黄/红颜色告警
分支主题
Raw use of parameterized class xxxx提示可以通过@SuppressWarnings("rawtypes") 来消除, 强制类型转换可以通过 @SuppressWarnings("unchecked")来消除,不允许@SuppressWarnings("all") 。
Git提交规范
每一个功能点对应一次commit
message类型
feat: 添加新特性
fix: 修复xxx bug
style: 仅仅修改了空格、格式缩进、逗号等等,不改变代码逻辑
refactor: 代码重构,没有加新功能或者修复bug
docs: 仅仅修改了文档
perf: 增加代码进行性能测试
test: 增加测试用例
chore: 改变构建流程、或者增加依赖库、工具等
revert:回滚此前提交的commit记录
参考插件
分支主题
References
阿里巴巴编程规范
阿里巴巴开发手册(嵩山版2020.8.3).pdf
相关公司
南大先腾
CVTE
北京多来点信息技术有限公司
JVM配置
腾讯
https://google.github.io/styleguide/javaguide.html
深圳市富龙小额贷款有限公司
开源社区
PowerJob
分支主题
Apache Shenyu
分支主题
Flyway
Migrations
收藏
0 条评论
下一页