demo/README.md

332 lines
7.5 KiB
Markdown
Raw Normal View History

2025-02-21 09:03:22 +08:00
# FxBoot
## 一、开发准备
### 1.开发工具IDEA
### 2.安装插件
#### google-java-format谷歌代码规范插件
Preferences->Other Settings->google-java-format Settings
![image.png](https://s1.ax1x.com/2022/08/29/vf9aKP.png)
#### save actions保存代码自动格式化插件
Preferences->Other Settings->Save Actions
![image.png](https://s1.ax1x.com/2022/08/29/vf9Nvt.png)
#### Alibaba Java Coding Guidelines阿里编码规范插件
#### JRebel and XRebel热加载插件
下载旧版本手动安装[JRebel and XRebel 2022.4.1](https://plugins.jetbrains.com/plugin/4441-jrebel-and-xrebel/versions)
跟随JRebel setup guide导航一步步设置激活插件可前往[jrebel.qekang.com](http://jrebel.qekang.com/)获取一键地址,例如
```
地址https://jrebel.qekang.com/f9754b17-23dd-4915-a0c6-4fafef7e46e0
邮箱:随意
```
而后可使用该插件代替原有的启动按钮,修改代码后无需重启即可生效
![zUHjzT.png](https://s1.ax1x.com/2022/11/28/zUHjzT.png)
## 二、快速入门
### 1.修改项目
配置根目录的`gradle.properties`,修改项目名、版本号(有必要的话)。
```shell
projectName=fx-boot
projectVersion=1.0.0
```
### 2.导入数据库
新建fxboot数据库字符集选择`utf8mb4`,排序规则选择`utf8mb4_general_ci`
将根目录下的`db/fxboot.sql`导入到新建的数据库中
### 3.修改配置
> 具体可查阅 `app/resources/application.yml`
若数据库为`127.0.0.1:3306`且账号密码都为`root`,则可跳过此步骤
否则可配置环境变量(如何配置请自行搜索),支持环境变量如下
#### mysql
- FXBOOT_MYSQL_HOST
- FXBOOT_MYSQL_PORT
- FXBOOT_MYSQL_USER
- FXBOOT_MYSQL_PASSWORD
#### redis
- FXBOOT_REDIS_HOST
- FXBOOT_REDIS_PORT
- FXBOOT_REDIS_DATABASE
### 4.运行项目
在app模块中的FxBootApplication启动类上右键运行或者在IDE右上角找到启动按钮点击启动
### 5.初始化提交环境
> 需要安装npm且安装pnpm未安装可执行`npm i -g pnpm`
```shell
pnpm i
```
### 6.提交代码
#### 6.1 开启暂存区
![img.png](https://s1.ax1x.com/2022/12/08/z2NDdx.png)
#### 6.2 暂存想要提交的文件
每次暂存前,请审查一遍自己变动的,降低审查被驳回的概率
![img.png](https://s1.ax1x.com/2022/12/08/z2NfOA.png)
#### 6.3 提交已暂存的文件
具体提交规范查看相关文档
```shell
pnpm cz
```
## 三、开发规范
### 1.结构分层
分controller/entity/mapper/service四个层次复杂模块需再次分级
- controller/system
- controller/base
### 2.注释
- 类上需`author``date`
```java
/**
* @author huanghs@zgfxrc.cn
* @date 2021.11.22
*/
```
- 方法上需通过/**回车自动生成注释,并补齐入参和返回的说明。
```java
/**
* 不为empty则执行方法empty包含null、数组队列空等情况
*
* @param obj 对象
* @param apply 方法(传入对象)
*/
```
- 若方法添加时间与类不一致,需要增加如`@date 2021.11.22`说明。
```java
/**
* 不为empty则执行方法empty包含null、数组队列空等情况
*
* @param obj 对象
* @param apply 方法(传入对象)
* @date 2021.11.22
*/
```
- 若且此类为他人创建,而你创建了方法,则需要增加如`@date 2021.11.22 your@email.com`说明
```java
/**
* 不为empty则执行方法empty包含null、数组队列空等情况
*
* @param obj 对象
* @param apply 方法(传入对象)
* @date 2021.11.22 your@email.com
*/
```
### 3.entity规范
注释注解
```java
/**
* 用户表
*
* @author huanghs@zgfxrc.cn
* @date 2021.11.22
*/
@Data
@ApiModel("用户表")
@EqualsAndHashCode(callSuper = true)
public class User extends Model<User> {
}
```
关联表无主键
```java
public class User extends Model<User> {
}
```
有主键
```java
public class User extends BaseModel<User> {
}
```
有主键且需要租户过滤
```java
public class User extends BaseModelWithTenant<User> {
}
```
### 4.controller规范
需要使用`@Api`说明业务, 其内方法需`@ApiOperation`说明具体功能, 通过`@Permission`指定访问接口所需权限
控制层不写业务逻辑所有代码需封装在Service中控制层只需要`service.runYourFunc()`调用封装的业务方法。
```java
/**
* @author huanghs@zgfxrc.cn
* @date 2021.11.22
*/
@RestController
@Api(tags = "用户管理")
@RequestMapping("sys/user")
public class SysUserController {
final SysUserService sysUserService;
// 最终会需要 sys_user_view 权限
@Permission("sys_user_view")
@ApiOperation("查询")
@PostMapping
public void get() {
sysUserService.runYourFunc();
}
}
```
### 5.RequestMapper
(1).遵循小写单词,多单词由/隔开,如`@RequestMapping("sys/user")`
(2).遵循POST规范所有接口使用`PostMapping`定义
(3).传参只能通过params传递`void func(Entity entity)`或者body传递`void func(@RequestBody Entity entity)`
(4).路由传参通过`@PostMapping("/get/one/{id}")`,通过`@PathVariable Long id`接收
### 6.Service规范
- 在Service中不能调用本类的其他方法避免aop失效
- 参数校验使用`Validate.nonNull(req.userId,"用户id不能为空")`等校验值和给出错误提示
## 四、部署
### 1.配置镜像
配置根目录`deploy.sh`的镜像仓库地址,并且在每次发布版本时,只需要修改版本号 `VERSION` 即可。
```properties
HUB=registry.cn-hangzhou.aliyuncs.com/rsjst
VERSION=1.0.0
```
### 2.打包
执行脚本,将会自动构建镜像`镜像仓库地址/项目名:版本号`并推送到仓库中,
例如 `registry.cn-hangzhou.aliyuncs.com/rsjst/fx-boot:1.0.0`
```shell
sh deploy.sh
```
### 3.部署
配置dockerSwarm的stack中的image为打包的镜像即可例如
```yml
version: '3.7'
services:
fx-boot:
image: registry.cn-hangzhou.aliyuncs.com/rsjst/fx-boot:1.0.0
ports:
- '8020:8020'
environment:
# 数据库配置
FXBOOT_MYSQL_HOST: 192.168.1.1
FXBOOT_MYSQL_PORT: 3306
FXBOOT_MYSQL_USER: root
FXBOOT_MYSQL_PASSWORD: 123456
FXBOOT_MYSQL_TABLE: fxboot
# Redis配置
FXBOOT_REDIS_HOST: 127.0.0.1
FXBOOT_REDIS_PORT: 6379
FXBOOT_REDIS_DATABASE: 1
FXBOOT_REDIS_PASSWORD: 123456
# *配置等待数据库启动完毕再启动应用
WAIT_FOR: 192.168.1.1:3306
WAIT_TIMEOUT: 60
# *配置active值若增加模块仍需要往后添加避免无法读取到子模块的配置例如application-upms.yml
SPRING_PROFILES_ACTIVE: prod,upms,recruit
# *存储配置,若不知道填什么向上级要
MINIO_ACCESS_KEY: xxx
MINIO_SECRET_KEY: xxx
MINIO_BUCKET_NAME: xxx
# 下述配置实现热更新,不需要可去除
deploy:
mode: replicated
replicas: 1
resources:
limits:
cpus: '0.75'
reservations:
cpus: '0.50'
update_config:
delay: 5s
order: start-first
```
## 五、相关文档
### 1.鉴权功能
[secret](https://github.com/seepine/secret/)
### 2.统一返回体包装
[wrap-spring-boot-starter](https://seepine.com/springboot/wrap/)
### 3.工具类
[tool](https://github.com/seepine/tool/)
### 4.ORM
[mybatis-plus](https://baomidou.com/)
### 5.部署相关
[构建多平台Docker镜像](https://seepine.com/docker/build-multi-platform-image/)
[Docker nginx conf 使用环境变量](https://seepine.com/docker/nginx/)
### 6.协同开发
[Git多分支开发](https://seepine.com/dev/git/multi-branch/)