目录1.前言2.什么是脚手架?3.脚手架是谁提供的?1.Spring官网脚手架2.阿里云脚手架4.手工搭建一个脚手架!1.工程框架2.应用层定义生成类接口3.FTL模板定义4.FTL生成文件5.创建框架入口6.测试验证5.源码下载6.总结7.系列推荐1.简介浓缩复用常见问题。虽然市场上已经有大量成熟稳定的轮子来支撑系统建设,即服务、框架、组件、工具等,但对于一些规模较大的公司来说,这些轮子不一定能很好地支撑。系统需要承载业务量。这时候就需要自己造一些轮子了。但是提倡不要重新发明轮子,新的轮子不一定保证稳定性。一般适用于官网推出的核心轮子,如SpringBoot、Netty、HBase等。但是对于一些特殊场景的解决方案工具组件,通常没有完全兼容的轮子,就像SpringBoot脚手架一样。其实每个比较大的公司都会有很多类似技术服务的组件,比如RPC、数据库路由、注册中心、分布式任务、MQ队列消息等,这时候脚手架的开发就需要适配这些组件来构建一个公司的技术栈实现了所需的系统架构。这一点不同于一些规模较小的互联网公司,完全可以使用SpringBoot提供的一整套解决方案。另外,造轮子是个人技术和薪水的积累!别说造不了飞机,是没提供场地!什么场景?你还能造轮子吗?所有用于架构基础设施的模块都可以成为轮子。通常我们在这些场景中:负载均衡、服务网关、服务治理、框架语言、服务组件、数据承载、框架结构、部署方式、工具插件、构建所需的轮子。其实对于一个比较成熟的互联网公司来说,大部分场景下的轮子基本都已经造好了。其余为通用组件,用于解决业务场景下的非业务逻辑,如高并发下的缓存热键、Redis层路由、事件邀请的非唯一短码生成等类似场景。但是,为这样的场景构建轮子也是非常有价值的。在公司层面稳定使用后,才能推广到市场获得一定的认可,更好的会被收录到Apache项目中。2、什么是脚手架?什么是脚手架?它是特定平台的术语吗?脚手架是一种构建数据库支持的软件应用程序的元编程方法。它是一些模型-视图-控制器框架支持的技术,程序员可以在其中编写描述如何使用应用程序数据库的规范。编译器使用此规范生成应用程序可用于创建、读取、更新和删除数据库条目的代码,有效地将模板视为构建更强大应用程序的“脚手架”。https://stackoverflow.com/questions/235018/what-is-scaffolding-is-it-a-term-for-a-particular-platform结合stackoverflow上的答案,脚手架是Ametaprogrammingapproachtobuildingdata-基于应用程序。创建系统架构的程序员编写了描述如何使用数据库的规范。脚手架可以根据这个规则手册生成相应的框架代码。我们称这种模式为脚手架,在脚手架上更高效地构建强大的应用!说白了,就是把简单的任务用常见的重复操作来简化,不再需要程序员一点点粘贴复制来clone一个已有的。建筑学。您只需要在接口或公共接口上传入必要的参数,就可以创建一个应用开发框架。3.脚手架是谁提供的?1.Spring官网脚手架推荐:????链接:https://start.spring.io源码:https://github.com/spring-io/start.spring.io说明:SpringInitializr本质上是一个web应用,可以通过web界面、SpringToolSuite、IntelliJIDEA等搭建一个基本的SpringBoot项目结构,同时你可以使用它的源码进行本地部署2.阿里云脚手架推荐:????链接:https://start.spring.io说明:AliyunJavaInitializr和SpringInitializr是类似的web服务和代码框架生成器,一键生成你的代码框架,完整的工具链,免费的IDEA插件,简单易用直接在IDE中生成,完善的工具链,免费的IDEA插件,方便直接在IDE中生成,也非常适合国内用户的网络环境。其实这两个脚手架可以生成一个很好的项目结构,让程序员可以快速进入统一标准下的开发环境。这只是取决于你选择的配套服务,你可以选择不同的框架。4.亲手搭建脚手架!有脚手架,何必自己搭?脚手架的目的是在统一标准下快速搭建系统框架,将系统开发过程中需要的配置、组件、服务、测试等进行集成。也通过配置引入到系统开发中。但是有时候互联网公司常见的脚手架并不适合使用,因为它没有引入一些公司自研的组件,不能很好的集成。如果研发人员在使用脚手架生成特定组件后需要大量复制,会破坏脚手架本身的能力,破坏指南和规范。因此,需要结合脚手架的开发能力,对各种具体的组件、服务、配置进行封装,实现统一的符合公司领域的脚手架。那么,本章将带大家看看一个脚手架,如何开发和实现它。其实也不算太负责任。我们可以利用freemarker的能力搭建一个系统框架。1.工程框架EasyRiggerInitializr└──src├──main│├──java│└──cn.bugstack.initializr.rigger││├──application││└──IProjectGenerator.java│├──domain│││├──模型│││└──ApplicationInfo.java│││└──ProjectInfo.java││└──服务││├──模块│││├──impl...──GenerationTest。java││││└──GenerationYml.java││└──BaseModule.java││└──ProjectGeneratorImpl.java│└──RiggerApplication.java│└──resources│├──generator││├──application.ftl││├──ignore.ftl││├──package-info.ftl││├──pom.ftl│├──test.ftl││└──yml.ftl│└──application.yml└──test└──java└──cn.bugstack.initializr.rigger.test└──ApiTest.java整个搭建脚手架的工程并不复杂,主要是通过Freemarker为各种定义生成对应的系统框架结构ftl模板文件。这包括:项目主体、框架结构、启动类、配置文件、测试类等。您也可以根据自己的需要生成相应的ORM类和映射关系。整个项目结构偏向于DDD层次结构。所有的生成方法都建立在domain域中,resources/generator定义了生成模板,其他地方没有太大区别。接下来简单介绍一下这个项目的代码,让大家了解这样一个项目是如何开发的,也可以通过这个项目继续完善自己需要的结构。2.应用层定义生成类接口cn.bugstack.initializr.rigger.application.IProjectGenerator.javapublicinterfaceIProjectGenerator{voidgenerator(ProjectInfoprojectInfo)throwsException;}DDD的分层结构通常在应用层比较薄的层定义接口,然后domain领域层相应地实现。该接口的定义主要是为了让外部调用者通过该接口创建项目框架。3.FTL模板定义什么是FreeMarker?FreeMarker是一个模板引擎:即基于模板和要更改的数据生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,一个程序员可以嵌入到他们开发的产品中的组件。模板是用FreeMarker模板语言(FTL)编写的。它是一种简单、专用的语言,而不是像PHP这样成熟的编程语言。即用真实的编程语言准备好要展示的数据,比如数据库查询、业务操作等,然后模板展示准备好的数据。在模板中,您可以专注于如何呈现数据,而在模板之外,您可以专注于显示哪些数据。FreeMarker在线手册:http://freemarker.foofun.cn3.1application.ftlpackage${packageName};importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclass${className}{publicstaticvoidmain(String[]args){SpringApplication.run(${className}.class,args);}}3.2pom.ftl
