Žiadny popis

tsurumure a7cd3aeccf 新增钉钉机器人对接 10 mesiacov pred
.mvn 09719a6ffc commit message 1 rok pred
configuration f5ef5eb732 完成监听接口 10 mesiacov pred
db 011371a9b7 Dev 10 mesiacov pred
src a7cd3aeccf 新增钉钉机器人对接 10 mesiacov pred
.drone.yml 5e15db93b9 调整目录 10 mesiacov pred
.gitignore 5be58211de Edit 10 mesiacov pred
Dockerfile e4620163c1 RestoreCache 10 mesiacov pred
README.md f5ef5eb732 完成监听接口 10 mesiacov pred
docker-compose.yml e4620163c1 RestoreCache 10 mesiacov pred
pom.xml 27b6c75eec 新增用户权限判断工具类 10 mesiacov pred

README.md

架构

  • Ubuntu 22.04 + JDK 17.0.2 + Maven 3.8.1
  • Docker 25.0.4 + Docker-Compose 2.6.1 + Gogs + Drone
  • MySQL 8.0.31 + Redis 5.0.14.1
  • 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.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/** 也是免登录可访问的接口

开发规范

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 名称进行修改

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.日志log加.gz压缩