# 服务工程脚手架 **Repository Path**: huoyingf4/empty_project ## Basic Information - **Project Name**: 服务工程脚手架 - **Description**: 服务工程脚手架 支持单体,支持微服务,多样化部署 认真阅读README! 认真阅读README! 认真阅读README! - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2020-12-08 - **Last Updated**: 2022-08-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 通过脚手架fork新工程步骤: ### 1 开发日志 #### 版本号 V1.1.3 #### 开发日志 ~~~ https://e.gitee.com/huoyingf4/projects/342817/repos/huoyingf4/empty_project/wiki/preview ~~~ ### 2 开发 #### 2.1开发步骤 - step 1 通过空脚手架empty-project 工程创建新的工程模板,修改相关工程目录,pom文件、启动脚本 - step 2 修改项目名,也就是文件夹的名字,修改pom.xml中的名称和描述 如下部分 ~~~ com.demo empty_project 1.0.0 jar empty_project demo project ~~~ - step 3 修改项目文件夹com.demo.empty_project为自己工程的路径 - step 4 修改aop下的LogAspectAop文件,修改日志切面文件路径 如下部分 ~~~ @Pointcut("execution(* com.demo.empty_project.controller..*.*(..))") public void controller(){} ~~~ - step 5 修改启动类 修改DemoApplication 修改为 服务名+Application 修改mapper扫描路径 如下 ~~~ @MapperScan("com.demo.empty_project.mapper") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ~~~ - step 6 【非强制】修改SwaggerConfig 中的路径 可以不修改 如下 ~~~ @Bean public Docket init() { return new Docket(DocumentationType.SWAGGER_2) .enable(swaggerShow) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.demo.autopay.controller")) .paths(PathSelectors.any()) .build(); } ~~~ - step 7 【非强制】修改DemoException文件 修改为 服务名+Exception 可以不修改 - step 8 尝试启动 ~~~ 访问 ip:port/doc.html 出现接口文档 以后开发的接口和实体都会在这上面展示 配置操作使用swagger的注解即可 ~~~ - 补充 单体服务的时候,删除pom中微服务标识的依赖 无需kafka时候,删除kafka文件 微服务架构的时候,pom中释放相应的依赖 #### 2.2 开发规范 ##### 2.2.1 命名规范 |名称 |使用范围 |解释说明| |----|----|----| |BO |用于Service,Manager,Business等业务相关类的命名| Business Object业务处理对象,主要作用是把业务逻辑封装成一个对象。| |DTO| 经过加工后的PO对象,其内部属性可能增加或减少| Data Transfer Object数据传输对象,主要用于远程调用等需要大量传输数据的地方,例如,可以将一个或多个PO类的部分或全部属性封装为DTO进行传输| |DAO| 用于对数据库进行读写操作的类进行命名| Data Access Object数据访问对象,主要用来封装对数据库的访问,通过DAO可以将POJO持久化为PO,也可以利用PO封装出VO和DTO| |PO |Bean,Entity等类的命名| Persistant Object持久化对象,数据库表中的数据在Java对象中的映射状态,可以简单的理解为一个PO对象即为数据库表中的一条记录| |POJO| POJO是DO/DTO/BO/VO的统称| Plain Ordinary Java Object 简单Java对象,它是一个简单的普通Java对象,禁止将类命名为XxxxPOJO| |VO| 通常是视图控制层和模板引擎之间传递的数据对象| Value Object 值对象,主要用于视图层,视图控制器将视图层所需的属性封装成一个对象,然后用一个VO对象在视图控制器和视图之间进行数据传输。| |AO| 应用层对象| Application Object,在Web层与Service层之间抽象的复用对象模型,很少用。| ![image-20211104101247972](https://media-1300336385.cos.ap-beijing.myqcloud.com/image-20211104101247972.png) ##### 2.2.2 接口设计规范 ~~~ 参考 https://e.gitee.com/huoyingf4/docs/368036/file/936927/preview ~~~ ##### 2.2.3 数据库设计规范 ~~~ 参考 https://e.gitee.com/huoyingf4/docs/368200/file/937217 参考 阿里编码规约《泰山版》 https://gitee.com/huoyingf4/dashboard/attach_files/472781/download ~~~ ##### 2.2.4 补充 ~~~ 引入其他一些功能的时候,如ocr,easypoi,工作流等,单独属于该组件的文件创建相应文件夹放组件文件夹下 其他的文件必须放到相应的位置 ~~~ ### 3 打包 修改相应的文件 - step1 修改部署脚本(在resource下的.sh文件),修改以下内容 ~~~ 启动类路径 APP_MAIN=com.demo.empty_project.DemoApplicatio 修改服务名 与 application.yml中的配置一致 (spring: application: name: demo) SERVICE_NAME="demo" ~~~ - step2 修改logback.xml 修改服务名为自己的服务名 ~~~ 第6行: 第108行: ~~~ - step2 maven选择 相应的环境 mvn package打包 (建议打包的时候先clean) ### 4 部署 #### 4.1 zip包部署 环境要求:jdk1.8 ~~~ 把打包好的文件放在相应的路径下,路径和日志收集的父级路径一致 step1 【创建文件夹】 创建相应服务的文件夹,文件夹名称建议和服务名一致(demo) step2 【解压】 unzip 打包好的文件(zip文件) step3 【修改脚本】 修改编码格式因为脚本本身是在windows上编写的到linux服务器上的环境shell脚本文件的默认编码格式还是windows的dos要修改为linux的编码格式 vim 脚本文件 :set ff=unix运行一次就行 启动命令 sh controller start 关闭命令 sh controller stop ~~~ #### 4.2 docker部署 ##### 4.2.1 环境要求: docker环境 【必须】有jdk镜像 私服环境【非必要】 jdk环境 maven环境 ##### 4.2.2 部署流程: step 1 修改Dockerfile文件 修改demo 为自己的服务名 如下部分 ~~~ COPY output/ ./demo RUN chmod -R 777 /home/work CMD cd demo && ./bin/boot.sh start ~~~ step 2 修改打包脚本文件build_shell.sh 修改target打包文件 修改empty_project改为自己的打包文件名 ~~~ rm -rf $OUT_DIR/*; cp $TG_DIR/empty_project-assembly.zip $OUT_DIR/empty-project.zip; cd $OUT_DIR/ unzip empty-project.zip if [ ! "$(ls -v $OUT_DIR)" ] ; then echo "Building error" exit 1 fi rm empty-project.zip ~~~ 修改demo 为自己的服务名 如下部分 ~~~ docker build -t demo:$currentTimeStamp . ~~~ step 3 修改脚本启动文件/bin/boot.sh 修改demo 为自己的服务名 如下部分 ~~~ # 需要修改服务名称 SERVICE_NAME="demo" # 需要修改项目启动类 APP_MAIN=com.demo.empty_project.DemoApplication ~~~ step 4 【非强制】修改启动参数(Java程序启动参数) 根据需要修改 ~~~ #JVM启动参数 #-server:一定要作为第一个参数,在多个CPU时性能佳 #-Xloggc:记录GC日志,这里建议写成绝对路径,如此便可在任意目录下执行该shell脚本 JAVA_OPTS="-Duser.timezone=GMT+8 -server -Xms512m -Xmx512m -Xmn128m -XX:SurvivorRatio=8 -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$GC_LOGS/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$GC_LOGS -XX:ErrorFile=$GC_LOGS/hs_err_pid%p.log" ~~~ ##### 4.2.3 服务器docker部署操作流程 step 1 拉取代码 ~~~ git clone -b 相应的分支【不写就是默认分支】 http://git...... ~~~ step 2 打镜像 ~~~ sh build_shell.sh prod【选对应的环境】 等待运行完成后会看到日志最后一行输出了一个镜像的ID 可以运行docker images 查看到所有的镜像 如果镜像过多可以运行以下命令筛选 docker images | grep 【镜像名】 ~~~ step 3 重命名镜像,由于镜像现在的版本号不是我们对应的版本号,要进行修改 【也可以在build的脚本中修改最后的时间戳,为对应的版本号,缺点是版本号迭代每次都要修改】 ~~~ docker tag 【镜像名】:【镜像版本号】 【锁部署机器的ip】:【所部署机器的端口】/【镜像名】:v【迭代的版本号】 eg: docker tag user:1601300258577 172.21.0.20:8082/user:v1.0.41 重命名完后,这时候有两个ID相同的镜像,建议删除之前未重命名的镜像 docker rmi -f 51a987f015eb(第三个参数) ~~~ step 4 启动镜像 ~~~ docker run -itd --name=【命名启动容器名】 -p 19600:19600 --restart=always -v /home/work/user 【镜像名】 && docker logs -f user_v1.0.0 eg: docker run -itd --name=user_v1.0.0 -p 19600:19600 --restart=always -v /home/work/user 172.21.0.20:8082/user:v1.0.0 && docker logs -f user_v1.0.0 ~~~ ### 5 贡献代码 #### 5.1 搭建开发环境 您需要在系统中安装好JDK 1.8或以上的版本,并安装好 Maven。您可能还需要一个IDE来进行开发。 #### 5.2 贡献 我们随时都欢迎任何贡献,无论是简单的错别字修正,BUG修复还是增加新功能。请踊跃提出问题或发起 PR。