【方向盘】女娲Knife-Initializr工程可公开访问啦


流水线,是工业革命的最重要产物,没有之一。
本文已被https://yourbatman.cn收录;程序员专用网盘https://wangpan.yourbatman.cn;公号后台回复“专栏列表”获取全部小而美的原创技术专栏

✍前言

你好,我是方向盘(YourBatman)。笔者的公号(Java方向盘)是保留地,有且只分享原创,不转载、不发商务广告!!!

今天给大家带来一个比较好玩的东西:女娲Knife-Initializr初始化工程。和上篇文章:【方向盘】是如何高效的使用IntelliJ IDEA 一样,发本文的“灵感”也是来自于自己的朋友圈:
这是那会的初版,并没有放在公网,只是内网自己使用:

这是现版,和初版基本一致,但已放到了公网,都可访问:https://start.yourbatman.cnhttp://152.136.106.14:8761

本文尽量少些文字,多些截图来向你介绍女娲工程有什么用。

所属专栏

相关下载

版本约定

  • 女娲Knife-Initializr工程

✍正文

为何需要标准化?

三流企业卖苦力,二流企业卖产品,一流企业卖专利,超一流企业卖标准。这是国际上流行的一种新理念。这句话深刻地揭示了当今世界群雄纷争的游戏规则,谁制定标准,谁就是强者和赢家。这也是实施标准战略和实施标准化的缘由和意义所在。

来,说点人话。几乎每个研发人员都吐槽过:你这做法不规范、不标准。在研发团队还不大的时候,制定太多的规范/标准投入产出比不高(毕竟制定标准、研发标准化的工具都需要资源投入),但当团队超过一定规模后(研发超过100人可认为规模不小了),这么做是有必要的,甚至是必须的

所以可以看到中、大厂都有中间件研发部、基础架构部、工程效率部、信息化部、测试开发部……这些部门并不能直接为公司带来效益,但在为产研赋能提效不懈努力,他们会根据企业现状量身定制规范/标准,并且会开发出对应工具来确保标准的落地(重要),让广大产研同学以实现标准化作业(“流水线作业”),最终让产研效率提升有质的飞越,创造更多价值。

为何需要初始化工程?

我们已经达成共识:标准化作业非常重要。那么该如何实施呢?

这个问题范围太广,涉及到产品、设计、研发、QA、运维等几乎所有与产品有关的部门,并非几句话或者一篇文章能说清楚明白的。作为一枚coder,本文只讨论代码相关部分,这被公认为是整个标准化“流水线”过程最为重要的部分。

在Java开发领域,Spring技术栈早已成为实际的开发标准。特别是Spring Boot的横空出世,更是巩固了它作为Java开发基石的地位。如果说当初搭建一个Spring应用用于开发需要有足够经验的程序员才能完成,具有较高上手门槛,那么Spring Boot将此门槛降到了1/3。

这还不够,Spring Boot面世后不久,Spring团队随即发布的start初始化工程,将人肉式手动创建“升级为”交互式自动创建,将准备项目的门槛直接压低到了0。不客气的讲,一个刚接触Spring Boot半天的的Java程序员,通过此初始化工程就能非常快速的搭建起一个企业级工程进入开发,极大的提高了生产效率,这便就是技术的力量

有哪些好用的start初始化项目?

既然初始化工程如此好用,接下来就介绍几款好用的初始化工程,供你参考使用。

✌Spring官方

地址:https://start.spring.io

优点

  • Spring官方出品
  • 依赖能保持最新(Spring Boot、Cloud等只要发布新版本,就能及时跟上)
  • 紧跟潮流

缺点

  • 在墙外。有时候访问速度堪忧

推荐指数:⭐️⭐️⭐️⭐️⭐️

✌香港镜像

地址:https://start.springboot.io

优点

  • 完全复刻Spring官方出品
  • 服务器部署在国内(香港),速度上不用再担心

缺点

  • 相较于Spring官方的,版本稍有滞后(一般滞后最长不超过一个月)
  • 非官方推荐,需要单独记/收录一个地址

推荐指数:⭐️⭐️⭐️⭐️

✌阿里云出品

地址:https://start.aliyun.com

优点

  • 国内(大陆)多处布点,速度很快
  • 中文界面,对国人友好
  • 深度集成阿里巴巴开源、商业化技术栈(如Spring Cloud Alibaba、Dubbo等)

缺点

  • Spring Boot/Cloud版本滞后比较多(看截图,最新的Spring Boot才到2.4.x)
  • 界面方面不会跟随着官网的改动而改动,后续可能会越差越多

推荐指数:⭐️⭐️⭐️

✌女娲工程

地址:https://start.yourbatman.cnhttp://152.136.106.14:8761

优点

  • 为企业定制化,可设计为专用
  • 适合内网部署,随意个性化定制

缺点

  • 非对公通用型

推荐指数:⭐️

我对女娲工程的定位是供以研究,而并非通用型的交付生产使用!!!

女娲工程介绍

一般来讲,稍具规模的研发团队都不可能直接从外网直接生成一个Spring Boot工程用于开发。那么首先我简要描述下女娲Knife-Initializr初始化工程的之于公司、产研团队的意义:

  1. 一切项目从此开始,能确保团队代码风格、目录结构基本一致,从而让规范/标准的落地成为可能
  2. 让开发者面向【中间项目】编程,从而让运维、架构师、产品效率团队能有抓手对某些事务做统一处理和卡点
  3. 内聚技术复杂度,做到业务复杂度和技术复杂度分离(如http基因染色、全链路压测、统一流量管控等等复杂度较强功能点)
  4. 助力开发者秒级生成符合公司标准化的project

很多公司的研发团队都有自己的工程模板,我也一样,对于工程模板的制作我共经历了三个阶段,分享给你:

阶段一:git工程模板 + shell脚本方式。
生成一个新项目的步骤:

  1. clone git工程模板到本地
  2. 运行准备好的shell脚本,并且输入工程名称、groupId等参数,得到新的工程

优点

  • 开发比较简单,能快速准备好这套模板

缺点

  • 过于程序员化,使用门槛颇高。必须阅读使用说明方可知道怎么做(至少git项目的地址、shell参数的顺序都必须阅读文档吧)
  • 无法确保生成的工程是最新的模板(如Spring Boot依赖不是公司规定的最新版本这类大技术债问题)。若要想是最新的模板,这高度依赖于开发者每次运行shell脚本之前,先从git上更新这个模板。而现实是:这很不现实。这也是这种方式最大的弊端

阶段二:maven archetype骨架方式。
生成一个新项目的步骤:

  1. clone git工程模板到本地
  2. 运行maven骨架命令(mvn archetype:generate xxx),得到新的工程

优点

  • (相较于阶段一)maven命令属于通用命令,无需向shell脚本一样做特殊说明,某种程度上降低了使用门槛

缺点

  • 同阶段一,无法确保开发者用的是最新的模板来生成(如Spring Boot依赖不是公司规定的最新版本这类大技术债问题)

阶段三:页面交互式方式。
生成一个新项目的步骤:

  1. 按照页面填写好GAV即可一键生成工程

优点

  • 100%能确保生成的项目是最新版本,确保各项依赖最新,最大程度杜绝依赖老旧的技术债问题
  • 可以预览,做到心中有数,所见即所得
  • 操作上0门槛,极速的体验

缺点

  • 这套初始化工程的开发会费点力气

下面通过截图简单演示下呗,前方多图预警。

此页面的设计思路:尽可能少的减少使用者的输入。一般来讲,开发者有且仅需输入yourArtifactId这一栏即可,也就是你的工程名。这里我输入user,然后点击下载PROJECT该user工程就下载到你的硬盘啦:

解压后,直接导入IDEA即可开始开发(目录结构为传统MVC架构):

当然,在下载之前,你也可以预览,具有所见即所得的效果:

关于项目架构,这里以最常用的【传统MVC架构】为例,简要介绍下工程目录。分模块介绍:

  • xxx-persistence模块

持久化模块。单纯的和数据打交道,建议不包含任何业务逻辑(有些同学有把业务逻辑写在SQL上的坏习惯,这是不建议的哦)。此模块有且仅有持久层相关依赖,如MyBatis、MySql驱动、Redis、MongoDB、ElasticSearch等。

  • xxx-api模块

本工程暴露出去的相关API、类。它不限于暴露的协议,也不限于暴露的方式。总之该Jar包是可以给别人引用的,因此需要特别注意两点:

  1. 最小侵入性:不要因为你的jar而影响别人的程序
  2. 最高稳定性:API的设计最好经常变动,所以不管是命名、规范、数据结构都要三思而后行,尽量做到超前考虑


  • xxx-app模块

应用模块,该模块就是最主要的啦,你所有的业务逻辑(业务复杂度)都在这里。该模块最终会被打包成可执行的Jar包,用于部署。所以它会引入xxx-api和xxx-persistence这两个模块。

这里特别解释下entrance程序入口。可能很多人都把Controller作为他们的程序入口,其实不然。 应用的访问入口(南向流量访问入口,并非应用启动入口哦。北向出口因不太影响层次结构,可随意)

  • Rest:http方式访问
  • RPC:远程调用方式访问(如dubbo)
  • Message:MQ消息方式访问、WebSocket方式访问
  • Scheduler:系统自动调度访问(注意:只有非常轻量级且和分布式无关的调度可放在本项目,否则请一律使用专用的执行器架构,使用job方式)

✍总结

好啦,关于女娲Knife-Initializr工程就先为你介绍到这啦,现在已放在公网,都可以免费访问、下载哈,感兴趣的同学可下载下来,一起探讨学习交流。

地址:https://start.yourbatman.cnhttp://152.136.106.14:8761

本专栏文章

推荐阅读

System.out.println("写得可还行?收藏再看吧,点个赞吧,分享下吧");
echo("关注【Java方向盘】 https://yourbatman.cn");
console.log("私聊YourBatman:fsx1056342982");

我是YourBatman:一个早在2013年就已毕业的大龄程序员。网瘾失足、清考、延期毕业、房产中介、送外卖、销售…是我不可抹灭的标签。现在是一个纯粹技术工。

  • 2013.08-2014.07宁夏银川中介公司卖二手房1年,毕业后第1份工作
  • 2014.07-2015.05荆州/武汉/北京,从事炸鸡排、卖保险、直销、送外卖工作,这是第2,3,4,5份工作
  • 2015.08开始从事Java开发,做过兼职,闯过外包,呆过大厂!现为我司基础架构团队负责人
  • Java架构师、Spring开源贡献者,CSDN 2019博客之星Top 10,博客专家,领域建模专家。热衷写代码,有代码洁癖;重视基础和基建,相信效率为王
  • 现在写纯粹技术专栏(公号后台回复专栏列表获取全部),不哗众取宠。如果你也有共鸣,可加我好友(fsx1056342982)一起进步哈(备注:java)

作者: YourBatman
声明: 本站文章均采用 CC BY 4.0 许可协议。你懂的!
  目录