搭建一个java项目的脚手架总结

搭建一个java项目的脚手架总结

最近一个月在公司经历了两个项目的从零到一的过程,都涉及到了从最初的只有需求,没有代码仓库的情况。一般情况下,迫于时间压力,我们一直都期望在一个比较完善项目上做小的修改,但是,往往天不随人愿,这里我整理一下一个新项目搭建的普遍方法,作为后续的工作之用,从而提高效率。

1.reade.md

编写readme文档,其如要内容需要包括,但不限于如下内容:

  • 项目简介:用一两句话简单描述该项目所实现的业务功能;
  • 技术选型:列出项目的技术栈,包括语言、框架和中间件等;
  • 本地构建:列出本地开发过程中所用到的工具命令;
  • 领域模型:核心的领域概念,比如对于示例电商系统来说有Order、Product等;
  • 测试策略:自动化测试如何分类,哪些必须写测试,哪些没有必要写测试;
  • 技术架构:技术架构图;
  • 部署架构:部署架构图;
  • 外部依赖:项目运行时所依赖的外部集成方,比如订单系统会依赖于会员系统;
  • 环境信息:各个环境的访问方式,数据库连接等;
  • 编码实践:统一的编码实践,比如异常处理原则、分页封装等;
  • FAQ:开发过程中常见问题的解答。

注意:readme文档,一定要持续更新,否则,会造成文档和代码的不一致

2.便携的脚本
尽可能多的提供自动化脚本,能够也能降低新人的上手难度和恐惧感,使其更加自信

  • 打开idea
  • 本地运行
  • 本地构建

3.代码分布
经过查看网上的相关资料,关于代码结构,我在考虑是否可以可以放弃按照controller,service,dao,entity的分包方式,而采用按照业务分包的方式(如business1,business2)。

  • 1.前者是按照技术的方式分包,后者是按照业务的方式分包
  • 2.前者会导致业务代码比较分散,后者能保证同业务内的代码尽可能的聚合
  • 3.在代码的日常维护修改中,前者的修改往往也会比较分散,而后者往往能够聚合在一起
  • 4.当项目需要进行拆分的时候,前者的耦合会比较紧密,拆分可能会比较困难,而后者可能会比较容易

4.自动化测试
4.1 自动化测试的分类

  • 单元测试(src/test/java):核心的领域模型,包括领域对象(比如Order类),Factory类,领域服务类等;
  • 组件测试(src/componentTest/java):不适合写单元测试但是又必须测试的类,比如Repository类,在有些项目中,这种类型测试也被称为集成测试;
  • API测试(src/apiTest/java):模拟客户端测试各个API接口,需要启动程序。

5.日志处理
关于日志记录重点需要考虑两个问题:

  • 链路追踪,比如MDC(Mapped Diagnostic Context)
  • 多节点下,日志集中记录,使用elk达到es中

6.异常处理
异常处理需要考虑的问题:

  • 格式统一
  • 上下文和结构化信息
  • 异常的唯一标识

7.定时任务
定时任务主要考虑的问题是分布式锁,可以使用的技术包括Shedlock、Redis、ZooKeeper和Hazelcast等的分布式锁实现机制

8.编码风格
google、alibaba、唯品会

9.静态代码检查

  • Checkstyle:用于检查代码格式,规范编码风格
  • Spotbugs:Findbugs的继承者(用过)
  • Dependency check:OWASP提供的Java类库安全性检查
  • Sonar:用于代码持续改进的跟踪(用过)
  1. 健康检查
    健康检查的主要作用:
  • 初步检查程序是否运行正常
  • 负载均衡软件会通过一个健康检查URL判断节点的可达性

11.接口文档
swagger

12.数据库迁移
flyway

13.多环境(profile)

  • local:用于开发者本地开发
  • ci:用于持续集成
  • dev:用于前端开发联调
  • qa:用于测试人员
  • uat:类生产环境,用于功能验收(有时也称为staging环境)
  • prod:正式的生产环境

14.跨域处理(CORS)
前后端应用分别部署在两个不同的域名下是,需要进行跨域处理

  1. 常用的第三方库
  • Guava:来自Google的常用类库
  • Apache Commons:来自Apache的常用类库
  • Mockito:主要用于单元测试的mock
  • DBUnit:测试中管理数据库测试数据
  • Rest Assured:用于Rest API测试
  • Jackson 2:Json数据的序列化和反序列化
  • jjwt:Jwt token认证(暂时未使用过)
  • Lombok:自动生成常见Java代码,比如equals()方法,getter和setter等;
  • Feign:声明式Rest客户端
  • Tika:用于准确检测文件类型(暂时未使用过)
  • itext:生成Pdf文件等(暂时未使用过)
  • zxing:生成二维码
  • Xstream:比Jaxb更轻量级的XML处理库(暂时未使用过)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容