FxBoot
一、开发准备
1.开发工具:IDEA
2.安装插件
google-java-format(谷歌代码规范插件)
Preferences->Other Settings->google-java-format Settings
save actions(保存代码自动格式化插件)
Preferences->Other Settings->Save Actions
Alibaba Java Coding Guidelines(阿里编码规范插件)
JRebel and XRebel(热加载插件)
下载旧版本手动安装JRebel and XRebel 2022.4.1
跟随JRebel setup guide导航一步步设置,激活插件可前往jrebel.qekang.com获取一键地址,例如
地址:https://jrebel.qekang.com/f9754b17-23dd-4915-a0c6-4fafef7e46e0
邮箱:随意
而后可使用该插件代替原有的启动按钮,修改代码后无需重启即可生效
二、快速入门
1.修改项目
配置根目录的gradle.properties
,修改项目名、版本号(有必要的话)。
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
)
pnpm i
6.提交代码
6.1 开启暂存区
6.2 暂存想要提交的文件
每次暂存前,请审查一遍自己变动的,降低审查被驳回的概率
6.3 提交已暂存的文件
具体提交规范查看相关文档
pnpm cz
三、开发规范
1.结构分层
分controller/entity/mapper/service四个层次,复杂模块需再次分级,如
- controller/system
- controller/base
2.注释
-
类上需
author
和date
/** * @author huanghs@zgfxrc.cn * @date 2021.11.22 */
-
方法上需通过/**回车自动生成注释,并补齐入参和返回的说明。
/** * 不为empty则执行方法,empty包含null、数组队列空等情况 * * @param obj 对象 * @param apply 方法(传入对象) */
-
若方法添加时间与类不一致,需要增加如
@date 2021.11.22
说明。/** * 不为empty则执行方法,empty包含null、数组队列空等情况 * * @param obj 对象 * @param apply 方法(传入对象) * @date 2021.11.22 */
-
若且此类为他人创建,而你创建了方法,则需要增加如
@date 2021.11.22 your@email.com
说明/** * 不为empty则执行方法,empty包含null、数组队列空等情况 * * @param obj 对象 * @param apply 方法(传入对象) * @date 2021.11.22 your@email.com */
3.entity规范
注释注解
/**
* 用户表
*
* @author huanghs@zgfxrc.cn
* @date 2021.11.22
*/
@Data
@ApiModel("用户表")
@EqualsAndHashCode(callSuper = true)
public class User extends Model<User> {
}
关联表无主键
public class User extends Model<User> {
}
有主键
public class User extends BaseModel<User> {
}
有主键且需要租户过滤
public class User extends BaseModelWithTenant<User> {
}
4.controller规范
需要使用@Api
说明业务, 其内方法需@ApiOperation
说明具体功能, 通过@Permission
指定访问接口所需权限
控制层不写业务逻辑,所有代码需封装在Service中,控制层只需要service.runYourFunc()
调用封装的业务方法。
/**
* @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
即可。
HUB=registry.cn-hangzhou.aliyuncs.com/rsjst
VERSION=1.0.0
2.打包
执行脚本,将会自动构建镜像镜像仓库地址/项目名:版本号
并推送到仓库中,
例如 registry.cn-hangzhou.aliyuncs.com/rsjst/fx-boot:1.0.0
sh deploy.sh
3.部署
配置dockerSwarm的stack中的image为打包的镜像即可,例如
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