Нет описания

tsurumure de619df404 添加素材风格 10 месяцев назад
.mvn 09719a6ffc commit message 2 лет назад
configuration 8fee86cf41 Edit yml conf 10 месяцев назад
db de619df404 添加素材风格 10 месяцев назад
src 4e6eafbb9f 新增需求反馈菜单 10 месяцев назад
.drone.version.sh 7b5a90b11f 新增版本号脚本 11 месяцев назад
.drone.yml cac555b228 Edit .drone.yml version 11 месяцев назад
.gitignore 5be58211de Edit 1 год назад
Dockerfile 4d6e05ab9b Add api version 11 месяцев назад
README.md f2e04e31f1 修复分块上传图片content_type非空校验 10 месяцев назад
docker-compose.yml b0a31ac55c 调整 11 месяцев назад
pom.xml e9ce061fec Test rabbitmq 10 месяцев назад
version.txt f4d3a4c64b 新增 getVersion 接口 11 месяцев назад

README.md

架构

  • Ubuntu 22.04 + JDK 17 + Maven 3.8
  • Docker + Docker-Compose + Gogs + Drone
  • MySQL 8.0.23 + Redis 6.2
  • Springboot 3.1.1 + Mybatis-plus 3.5.3.2

配置

Maven 配置 (用户配置) (阿里源)

./configuration/.m2/settings.xml

部署

1.自动打包

目前项目使用自动部署

2.手动打包

第三方JAR包放在 ./configuration/.m2/repository 目录,并使用命令添加到本地 Maven 仓库

mvn install:install-file -Dfile=configuration/.m2/repository/ziniao-sdk-java-5.1.0.jar -DgroupId=com.ziniao -DartifactId=ziniao-sdk-java -Dversion=5.1.0 -Dpackaging=jar

首次部署需在 pom.xml 中去除 copy-dependencies 注释,启用分包功能 (将包分离到 libs 文件夹中),像这样:

/home/www/project/BackendSys/libs

将分离出来的文件,然后上传到远程服务器目录

执行打包命令:

mvn clean package
mvn clean package -P dev

在 Ubuntu 部署

// 安装 nodup (Ubuntu-22.04 虚拟机可能需要安装)
apt install perforate -y

// 启动 (libs文件夹与.jar包同级)
// sh backendsys.sh restart
sh backendsys.sh start

// 监视日志
tail -f backendsys.log

开发指南

监听控制台消息 (单点)

http://xxxx.com/api/log/stream/watch?sign={配置文件固定密钥}

自定义工具类

SecurityUtil

注意:@Anonymous 下不可调用,否则会抛出错误

/*
 * (不需要实例化)
 * SecurityUtil.getUserId()
 * 
 * (需要实例化)
 * @Autowired
 * private SecurityUtil securityUtil;
 * 
 * securityUtil.hasPermission("3.2.1")
 * securityUtil.hasPermissions(Arrays.asList("3.2.1", "3.2.2"))
 * securityUtil.hasPermissions(Arrays.asList("3.2.1", "3.2.2"), MatchType.OR)
 *
 * 权限注解
 * @PreAuthorize("@sr.hasPermission('3.2.1')")
 * @PreAuthorize("@sr.hasPermissions(T(java.util.Arrays).asList('3.2.1', '3.2.2'))")
 */

自定义注解

  • 免登录权限 (No token)

    @Anonymous
    @GetMapping("/api/getAuthDemo")
    public Result getAuthDemo() {
    ..
    

    另外, /api/public/** 也是免登录可访问的接口

开发规范

命名风格
  • 入参:下划线命名 (例如: user_id)
  • 变量:小驼峰命名 (例如: userList)
  • 常量:全大写 (例如: APPID)
MySQL
  • 禁止使用外键
Mybatis
  • 禁止使用 where 1=1 (update 操作)
  • 字段非空时:

    SELECT COALESCE(uf.nickname, '') nickname, ..
    
  • SQL时间字段创建统一规范:

    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
  • 命名为 *_count 的统计字段,值是 Long 类型,例如:

    Long user_count = Convert.toLong(sysUserRole.get("user_count"));
    
其他规范
  • 创建实体类时,要创建多一个 Id 字段,比如 article_id,在进行 {查询详情/编辑/删除} 操作时,必须使用该 article_id 作为必填参数;

其他

项目名称更换
  • cmd + Shift + F 将 com.xxx 名称进行全局替换;
  • 将 src/main/java/com/xxx 名称进行修改

查看依赖树

可查看依赖中是否含有冲突项(例如 okhttp) $ mvn dependency:tree

Future (待加功能)

1.sys_dictionary.sql 字典表重构

  • 字段:{ id, dictionary_key, dictionary_value, lang }
  • 使用 JSON 作为储存值,例如:{ dictionary_key: "Gender", dictionary_value: "[{\"label\":\"男\",\"value\":1},{\"label\":\"女\",\"value\":2}]" }
  • 接口1:查询接口,首次调用Service时,将该值保存到Redis长效缓存
  • 接口2:手动更新缓存的接口

2.Nginx均衡负载,双应用,无感知重启