基于Springboot的服务器开发脚手架——自动生成工具
该工具默认生成java服务项目,但可以配置生成其他类型的项目或目录结构,如python、recat
等。这个工具自带了前面课程提到的所有功能,比如dao
操作、http、tracklog
日志、异常段处理等。可以节省大量建设项目和基础工作的开发时间。而且生成的项目文件源文件可以修改两次。
首先,如何使用它
建议下载ReleasesV1.0,解压后先运行包中包含的test.sh
脚本,会在解压后的目录的/output下生成三个预置的三个项目,restful、grpc和fixed(restful+grpc)
。
其次,生成一个定制项目
在此步骤中,建议选择一个预设。设置文件进行修改。
2.1、修改project.setting文件。
#项目配置
project . name = base-grpc-framework #项目名称
Project.groupId = com.zd #对应pom文件的groupId,整个项目的所有模块都是统一的。
Project.version = 1.0-SNAPSHOT #对应pom文件的groupId,整个项目的所有模块都是统一的。
Project.packaging = jar #项目打包类型
project . base package = com . ZD . base framework #源根目录
project . app . token key = token # token的密钥,用于http拦截器访问端的认证。
Project.app.apiPath = /api/** #用于http拦截器
#模块配置
Project.modules = API,Proto,App,Common,Core,DAO #所有模块名称
#模块类型,可选原型,API,应用程序,通用,restful,grpc,固定,持久性
#PS:一个完整项目的最佳实践是由五大类模块组成:API、Server、Common、App、DAO,所以在同一个配置文件中会有以下互斥约束
#API模块:(proto,API)二选一,
#服务器模块:restful、grpc、fixed、三选一、
#所需模块:应用程序,启动
#可选模块:持久性、通用持久性和工具类
api.module.type = api
API . module . artifact id = base-grpc-framework-API
proto.module.type = proto
proto . module . artifact id = base-grpc-framework-proto
common.module.type =公共
common . module . artifact id = base-grpc-framework-common
app.module.type =应用程序
app . module . artifact id = base-grpc-framework-app
核心.模块.类型=固定
core . module . artifact id = base-grpc-framework-core
Core.moudle.port = 18080 #http服务端口
core . cradle . grpc . port = 9090 # grpc服务端口
dao.module.type =持久性
Dao . module . artifact id = base-grpc-framework-Dao
Dao . module . MySQL . dbip = 127 . 0 . 0 . 1
dao.module.mysql.dbPort = 3306
Dao . moudle . MySQL . dbname = bad case
Dao . module . MySQL . db username = root
Dao . module . MySQL . db password = 12345678
Dao . module . MySQL . mapper = mybatis # mapper文件存储位置
2.2.生成用户定义的项目
Java-jar grpc-framework-project-generator-1.0-SNAPSHOT-jar-with-dependencies . jar[setting = project _ fixed . setting][SLT =/SLT/source/]
设置默认值为:project.setting
slt的默认值是:/slt/source/注意最后一个/不要扔掉。
2.3.打包走人
这台机器上需要安装Maven。执行以下命令:
cd /output/xxxxProject
mvn全新安装-Dmaven.test.skip=true
mvn干净包-Dmaven.test.skip=true
Java-jar-d spring . profiles . active = dev xxxx project . jar
第三步:测试
打开http://localhost:18080/swagger-ui . html
例如,在上述文件中
project . name = base-grpc-framework
project . version = 1.0-快照
app . module . artifact id = base-grpc-framework-app
执行以下命令:
CD/output/base-grpc-框架
mvn全新安装-Dmaven.test.skip=true
mvn干净包-Dmaven.test.skip=true
Java-jar-d spring . profiles . active = dev 1。base-grpc-framework-app-1。1.0-SNAPSHOT.jar
第三步:测试
打开http://localhost:18080/swagger-ui . html
第三,配置符合公司个性的默认项目。
在上述工具中,作者构建了一些类和文件,这些类和文件可以被编辑和替换,或者基于我的内置类进行扩展。
3.1.展开基本文件
展开配置文件slt/source/sltext.json,因为有些java实现内置在工具本身,基于规范的要求一般不允许公司修改这些文件。如果用户部门有个性化需求,比如增加一个基础类,可以在不影响基础版本的情况下,通过该功能进行个性化扩展。
{
"原型":[
{ " name ":" grpcaccessinterceptor . Java "," package path ":"/grpc/interceptor "," fileType": "source "," fileOperatorType": "create"}
]
}
[选项]
moduleType:原型、应用程序、持久性、公共、restful、grpc、固定
名称:文件名
packagePath:文件路径
文件类型:源、yml、xml或配置
fileOperatorType:创建、复制或追加
3.2.重新制定基本文件。
基本文件存储路径:slt/source。作者现在的版本有一个限制,内置文件不能缺失,只能重写,否则报错。如果想将其配置为公司内部文件或者修改基础文件,可以下载作者的源代码进行修改,或者删除源代码中的所有配置,这些都是由sltext.json实现的
源代码修改位置:
com . ZD . tools . project . generator . model . module包中的所有文件
下面的类用于生成src/main和src/resources目录,如果不需要,其中的代码可以被注释掉。
com . ZD . tools . project . generator . analysis . process . settingfileconvert . configownattr()
2.对源代码修改的描述,可以根据文件名对应各种类型模块的配置。
ModuleApi.java:对应于Api类型的模块
ModuleApplication.java:对应于应用程序类型的模块
ModuleCommon.java:对应于通用类型的模块
ModuleFixed.java:固定类型的对应模块。
ModuleGrpc.java:对应Grpc类型的模块
java:对应于持久性类型的模块
Moduleproto.java:对应于原型类型的模块
java:对应于Restful类型的模块
源代码如下:
公共类ModuleRestful扩展AbstractModule {
私有字符串端口;
//预生成目录结构
@覆盖
公共void configOwnDir() {
super . configowndir();
getDirs()。add(getPackagePath()+file . separator+" server ");
getDirs()。add(getPackagePath()+file . separator+" restful ");
getDirs()。add(getPackagePath()+file . separator+strformatterutil . replace slash(" restful/config "));
getDirs()。add(getPackagePath()+file . separator+strformatterutil . replace slash(" restful/advice "));
getDirs()。add(getPackagePath()+file . separator+strformatterutil . replace slash(" restful/interceptor "));
getDirs()。add(getPackagePath()+file . separator+strformatterutil . replace slash(" restful/model "));
}
//预生成文件
@覆盖
public void configOwnSourceFile(){
super . configownsourcefile();
getSourceFiles()。add(new SourceFile("log4j2.xml ",getResourcesPath(),"",GenEnum.fileType.config,gene num . file operator type . copy));
getSourceFiles()。add(new source file(" restfulhttpexceptionadvice . Java ",getPackagePath(),strformatterutil . replace slash("/restful/advice "),GenEnum.fileType.source,gene num . fileoperator type . create));
getSourceFiles()。add(new source file(" restfulaccessinterceptor . Java ",getPackagePath(),strformatterutil . replace slash("/restful/interceptor "),GenEnum.fileType.source,gene num . fileoperator type . create));
getSourceFiles()。add(new source file(" restfulinterceptorregister . Java ",getPackagePath(),strformatterutil . replace slash("/restful/interceptor "),GenEnum.fileType.source,gene num . fileoperator type . create));
getSourceFiles()。add(new source file(" restfultokeninterceptor . Java ",getPackagePath(),strformatterutil . replace slash("/restful/interceptor "),GenEnum.fileType.source,gene num . fileoperator type . create));
getSourceFiles()。add(new source file(" swagger config . Java ",getPackagePath()、strformatterutil . replace slash("/restful/config ")、GenEnum.fileType.source、gene num . file operator type . copy));
getSourceFiles()。add(new source file(" application-restful . properties ",getResourcesPath(),"",GenEnum.fileType.yml,gene num . file operator type . append));
getSourceFiles()。add(new source file(" POM _ restful . XML ",getBasePath(),"",GenEnum.fileType.xml,gene num . fileoperator type . copy));
}
}
3.3.写基础文档。
基本文件可以参照作者预置的文件进行修改,主要是替换。带有占位符的java文件。例子如下:
程序包$ { package };#固定书写
#common是模块类型之一(Proto、API、Application、common、RESTful、GRPC、Fixed、persistence),
#“模块”是固定后缀。在本例中,${commonModule}表示一个引入公共模块的类。
导入$ { common module } . spring . apper properties;
导入$ { common module } . spring . grpc . abstractgrpcaccessinterceptor;
导入lombok . extern . SLF 4j . SLF 4j;
导入org . spring framework . beans . factory . annotation . auto wired;
/**
* @Title: ${package}。${className}
* @描述
* @作者刘冬
* @日期2022年1月13日下午4:40
*/
@Slf4j
类${ class name }扩展了abstractgrpccessinterceptor { #固定写入
@自动连线
私有apper properties apper properties;
@覆盖
受保护的字符串令牌密钥(){
返回apper properties . gettokenkey();
}
}