# 服务工程脚手架
**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层之间抽象的复用对象模型,很少用。|

##### 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。