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