基于Springboot的服务端开发脚手架-自动生成工具

继之前的

  • 专题系列课程: ​​从零开始搭建grpc分布式应用​​
  • 完整DEMO:​​基于Springboot的Rpc服务端开发脚手架(base-grpc-framework)​​

后带来一款项目自动手成工具(由于包路径等原因,完整demo想应用在实际开发中需要改很多代码),可以设置成自己公司的一些规定包路径等。

  • 自动生成工具源码地址:​​源码下载​​

此为一工具,默认生成java服务工程,但可经过配置生成其它类型的工程或目录结构,如python、recat等。此工具中自带了之前课程中提到的dao操作、http拦截、tracklog日志跟踪、exception切面处理等所有功能。可节省大量的搭建工程和基础工作的开发时间。而且生成的项目文件源文件,可进行二次修改。

一、如何使用

建议下载ReleasesV1.0,解压后先运行包中自带的test.sh脚本,会在解压目录的/output下生成三个预置好的三个工程,restful、grpc、fixed(restful+grpc)。

sh test.sh

截图如下:

二、生成自定义的工程

这一步建议选择一个预置的.setting文件进行修改,配置文件说明如下:

2.1、修改project.setting文件

# project config
project.name = base-grpc-framework   #工程名称
project.groupId = com.zd   #对应pom文件的groupId,全工程所有模块统一
project.version = 1.0-SNAPSHOT #对应pom文件的groupId,全工程所有模块统一
project.packaging = jar  #工程打包类型project.basePackage = com.zd.baseframework  #源码根目录project.app.tokenKey = token  #token的key,用于http拦截器访问端验证用
project.app.apiPath = /api/** #用于http拦截器使用#module config
project.modules = api, proto, app, common, core, dao #所有模块名称#模块类型,可选的有 proto, api, application, common, restful, grpc, fixed,persistence
#PS:一个完整工程最好的实践是由API, SERVER, COMMON, APP, DAO 5个大类型的模块组成,所以在同一个配置文件中会有如下互斥约束
#API模块:(proto, api)二选一,
#SERVER模块:restful, grpc, fixed 三选一,
#必要模块:application,启动
#可选模块:persistence, common 持久化和工具类
api.module.type = api 
api.module.artifactId = base-grpc-framework-apiproto.module.type = proto
proto.module.artifactId = base-grpc-framework-protocommon.module.type = common
common.module.artifactId = base-grpc-framework-commonapp.module.type = application
app.module.artifactId = base-grpc-framework-appcore.module.type = fixed
core.module.artifactId = base-grpc-framework-core
core.moudle.port = 18080 #http服务端口
core.moudle.grpc.port = 9090 #grpc服务端口dao.module.type = persistence
dao.module.artifactId = base-grpc-framework-dao
dao.module.mysql.dbIp = 127.0.0.1
dao.module.mysql.dbPort = 3306
dao.moudle.mysql.dbName = badCase
dao.module.mysql.dbUsername = root
dao.module.mysql.dbPassword = 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/]
setting默认值为:project.setting
slt默认值为:/slt/source/ 注意最后的/不要丢掉

2.3、打包运行

需要本机装有maven,执行以下命令:

cd /output/xxxxProject
mvn clean install -Dmaven.test.skip=true
mvn clean package -Dmaven.test.skip=true
java -jar -Dspring.profiles.active=dev xxxxProject.jar# Step3: Test
open http://localhost:18080/swagger-ui.html

比如上述文件中

  1. project.name = base-grpc-framework
  2. project.version = 1.0-SNAPSHOT
  3. app.module.artifactId = base-grpc-framework-app

则执行以下命令:

cd /output/base-grpc-framework
mvn clean install -Dmaven.test.skip=true
mvn clean package -Dmaven.test.skip=true
java -jar -Dspring.profiles.active=dev 1. base-grpc-framework-app-1. 1.0-SNAPSHOT.jar# Step3: Test
open http://localhost:18080/swagger-ui.html

三、配置符合公司个性的默认工程

上述工具中笔者内置了一些类和文件,这些文件是可以被编辑和替换的,也可基于笔者内置的类来扩展。

3.1、扩展基础文件

扩展配置文件 slt/source/sltext.json,因工具本身内置了一些java实现,基于规范的述求一般公司对这些文件是不允许修改的,如果使用部门有个性化需求的话,比如增加一个基础类,就可以通过这个功能来实现个性化和扩展但又不影响基础版本。

{"proto": [{"name": "GrpcAccessInterceptor.java", "packagePath": "/grpc/interceptor", "fileType": "source", "fileOperatorType": "create"}]
}
[options]
moduleType: proto, application, persistence, common, restful, grpc, fixed
name: fileName
packagePath: file path 
fileType:  source, yml, xml or config
fileOperatorType: create, copy or append

3.2、重新制定基础文件

基础文件存储路径:slt/source,笔者现在的版本有一个限制就是内置的文件不允许缺失只能改写,否则会报错。如果想配置成公司内部的文件或对基础文件有修改,可以下载笔者的源码后进行修改,或是把源码中所有的配置全部删除,全部用sltext.json的方式来实现

  1. 源码修改位置:

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  :对应application类型的模块
ModuleCommon.java        :对应common类型的模块
ModuleFixed.java        :对应fixed类型的模块
ModuleGrpc.java          :对应grpc类型的模块
ModulePersistence.java  :对应persistence类型的模块
ModuleProto.java        :对应proto类型的模块
ModuleRestful.java      :对应restful类型的模块

源码如下:

public class ModuleRestful extends AbstractModule {private String port;//预生成目录结构@Overridepublic void configOwnDir() {super.configOwnDir();getDirs().add(getPackagePath() + File.separator + "server");getDirs().add(getPackagePath() + File.separator + "restful");getDirs().add(getPackagePath() + File.separator + StrFormatterUtil.replaceSlash("restful/config"));getDirs().add(getPackagePath() + File.separator + StrFormatterUtil.replaceSlash("restful/advice"));getDirs().add(getPackagePath() + File.separator + StrFormatterUtil.replaceSlash("restful/interceptor"));getDirs().add(getPackagePath() + File.separator + StrFormatterUtil.replaceSlash("restful/model"));}//预生成文件@Overridepublic void configOwnSourceFile(){super.configOwnSourceFile();getSourceFiles().add(new SourceFile("log4j2.xml",                      getResourcesPath(), "", GenEnum.fileType.config, GenEnum.fileOperatorType.copy));getSourceFiles().add(new SourceFile("RestfulHttpExceptionAdvice.java", getPackagePath(), StrFormatterUtil.replaceSlash("/restful/advice"),      GenEnum.fileType.source, GenEnum.fileOperatorType.create));getSourceFiles().add(new SourceFile("RestfulAccessInterceptor.java",   getPackagePath(), StrFormatterUtil.replaceSlash("/restful/interceptor"), GenEnum.fileType.source, GenEnum.fileOperatorType.create));getSourceFiles().add(new SourceFile("RestfulInterceptorRegister.java", getPackagePath(), StrFormatterUtil.replaceSlash("/restful/interceptor"), GenEnum.fileType.source, GenEnum.fileOperatorType.create));getSourceFiles().add(new SourceFile("RestfulTokenInterceptor.java",    getPackagePath(), StrFormatterUtil.replaceSlash("/restful/interceptor"), GenEnum.fileType.source, GenEnum.fileOperatorType.create));getSourceFiles().add(new SourceFile("SwaggerConfig.java",              getPackagePath(), StrFormatterUtil.replaceSlash("/restful/config"),      GenEnum.fileType.source, GenEnum.fileOperatorType.copy));getSourceFiles().add(new SourceFile("application-restful.properties",getResourcesPath(), "", GenEnum.fileType.yml, GenEnum.fileOperatorType.append));getSourceFiles().add(new SourceFile("pom_restful.xml", getBasePath() ,"", GenEnum.fileType.xml, GenEnum.fileOperatorType.copy));}
}

3.3、编写基础文件

基础文件可参考笔者预置的文件进行修改,主要是用占位符替换.java文件中的package, import和className。示例如下:

package ${package};  #固定写法#common为模块类型(proto, api, application, common, restful, grpc, fixed,persistence)中选一个, 
# "Module"为固定后缀,例子中${commonModule}表示引入common模块的一个类
import ${commonModule}.spring.ApperProperties;  
import ${commonModule}.spring.grpc.AbstractGrpcAccessInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;/*** @Title: ${package}.${className}* @Description* @author liudong* @date 2022/1/13 4:40 PM*/
@Slf4j
public class ${className} extends AbstractGrpcAccessInterceptor { #固定写法@Autowiredprivate ApperProperties apperProperties;@Overrideprotected String tokenKey() {return apperProperties.getTokenKey();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程笔记 html5cssjs 008 HTML图片

编程笔记 html5&css&js 008 HTML图片 一、HTML 图像二、HTML 图像- Alt属性三、HTML 图像- 设置图像的高度与宽度四、支持的图像格式五、对齐设置六、操作小结 和印刷品一样,网页上不仅要有文字,还要有图片和声音、视频、绘画等媒体形式。这一节…

广州求职招聘(找工作)去哪里找比较好

在广州找工作,可以选择“吉鹿力招聘网”这个平台。它是一个号称直接和boss聊的互联网招聘神器,同时,“吉鹿力招聘网”作岗位比较齐全,企业用户也多,比较全面。在“吉鹿力招聘网”历即可投递岗位。 广州找工作上 吉鹿力…

学习的记录

一、内核安装 1.安装内核编译工具 install gcc gcc-c ncurses ncurses-devel cmake elfutils-libelf-devel openssl-devel 将内核源码linux-4.14.160.tar拷贝到/usr/src/kernels目录下 cp -r linux-4.20.2.tar.xz /usr/src/kernels 2.进入内核源码所在的文件夹&#xff1…

结构体与函数简单总结(依靠洛谷结构体题与函数题单)

函数结构体简单总结 依靠洛谷函数与字符串题单 文章目录 函数结构体简单总结前言一、函数1、有返回值的函数2、无返回值函数3、递归函数 二、结构体总结 前言 之前总结了字符串的简单应用,随着函数与结构体的题单完成,入门题单也就刷完了,现…

你可能不知道的5款好用封面设计工具,快来一探究竟吧!

我相信每个作者和出版商都希望在一部作品完成后有一个醒目的封面,这样潜在的读者就会有足够的好奇心拿起这本书,你的书的销量就会上升。这就是封面设计软件的使用,专业的封面设计软件可以增加前沿效果,呈现最适合书籍内容的创意布…

Tailscale:随时随地远程和使用服务器

Tailscale是什么? 网上有时候提到tailscale,总是介绍好多,比如以下介绍,但是太官方了 Tailscale 是一种基于 WireGuard 的虚拟组网工具,和 Netmaker 类似,最大的区别在于 Tailscale 是在用户态实现了 Wire…

NSSCTF 1zjs

开启环境: 搞就完事了,别玩魔法! 源码打开 点击访问:./dist/index.umd.js" 搜索php,找到23条相关的,注意到有一个特别的信息: PERFORMANCE OF THIS SOFTWARE.Your gift just take it : /fk3f1ag.php 访问: node4.anna.nssctf.cn:28325/fk3f1ag.php 得到这样: ([![]…

【每日试题】精选Java面试题八股文

题目1:什么是Java的泛型?请举例说明。 答案:Java的泛型是一种参数化类型的概念,可以在类、接口和方法中使用。使用泛型可以在编译时进行类型检查,提高程序的安全性和可读性。例如,可以定义一个泛型类List来…

ubuntu系统上安装virtualenv后报错“Command ‘virtualenv‘ not found”

前言 Ubuntu系统上,由于不同用户可能会导致依赖包安装后,无法正常加载命令,就比如, pip3 install virtualenv后,报错:Command virtualenv not found, but can be installed with 这是由于当前用户安装依赖…

【高录用-快速见刊-EI稳定检索】2024年计算机建模与信号处理国际学术会议(ICCMSP 2024)

【高录用-快速见刊-EI稳定检索】2024年计算机建模与信号处理国际学术会议(ICCMSP 2024) 2024 International Conference on Computer Modeling and Signal Processing 一、【会议简介】 尊敬的各位专家、学者和与会嘉宾: 欢迎来到2024年计算…

opencv期末练习题(3)附带解析

创建黑色画板,并支持两种画图功能 import mathimport cv2 import numpy as np """ 1. 创建一个黑色画板 2. 输入q退出 3. 输入m切换画图模式两种模式,画矩形和画圆形。用户按住鼠标左键到一个位置然后释放就可以画出对应的图像 "&qu…

Could not resolve all dependencies for configuration ‘:classpath‘

报错解析: 问题是与构建配置和依赖解析有关的,特别是在使用Maven或Gradle这样的构建工具时 报错解决: 该方法在网上经过多个参考后认为对我自己有用的方法,就是将maven镜像的http改为https

静态库与动态库

这里写目录标题 静态库与动态库简介 静态库简图制作与使用总览制作 二级目录 动态库(共享库)简图二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 静态库与动态库 简介 静态库&…

python 画图转化为html

优点:画图转化为html可以手动拖动。并且可以放大缩小 示例一 import matplotlib.pyplot as plt import mpld3# 准备数据和图表 x [1, 2, 3, 4, 5] y [2, 3, 5, 7, 11]fig, ax plt.subplots(figsize (10,10)) ax.plot(x, y, o-, labelData Points) ax.set_xlabe…

访问学者J1签证的申请流程

访问学者J1签证是许多人前往美国进行学术研究和文化交流的重要途径之一。申请J1签证需要经过一系列步骤和程序,让知识人网小编带大家来了解一下申请流程吧。 首先,申请者需要确认自己符合J1签证的资格要求。这包括被美国的赞助机构或组织接受&#xff0c…

微前端 Micro App

MicroApp 官网链接 MicroApp 链接

使用jieba库进行中文分词和去除停用词

jieba.lcut jieba.lcut()和jieba.lcut_for_search()是jieba库中的两个分词函数,它们的功能和参数略有不同。 jieba.lcut()方法接受三个参数:需要分词的字符串,是否使用全模式(默认为False)以及是否使用HMM模型&…

C++ DAY5 作业

1.全局变量,int monster 10000;定义英雄类hero,受保护的属性string name,int hp.int attck;公有的无参构造,有参构造,虚成员函数void Atk()blood-0;},法师类继承自英雄类,私有属性int ap_atk50…

CyberLink的颜色修正软件ColorDirector Ultra 2024 12.0版本在windows系统下载与安装配置

目录 前言一、ColorDirector Ultra 安装二、使用配置总结 前言 ColorDirector Ultra是由CyberLink公司开发的一款专业的颜色修正和调整工具,可以帮助用户实现对视频中颜色的全方位管理。该软件支持对各种分辨率的视频进行颜色调整,并且可以从各种设备&a…

QT系统移植教程

QT系统移植教程 QT系统移植教程 qt教程: http://www.qter.org/portal.php?modview&aid5 下载源码: http://download.qt.io/archive/qt/5.4/5.4.2/single/ 解压源码: tar -xvf qt-everywhere-opensource-src-5.4.2.tar.x…