## 项目

[mjava](https://mc.100ali.com/) 标准化后端接口, 自用脚手架封装, mc 之 java-mcli 系列 代号 mjava

### 运行

1. *若是首次拉取项目
    - 先执行主项目 java-mcli install, 获取 mjava 包依赖, 且在关联 maven 内生成项目结构: 否则子项目可运行但打包报错
    - maven 内可删除其他子项目, 保留 java-mcli 与 mjava 目录即可. 注意 mjava pom 需要配置为基础包, 否则关联子项目打包报错

2. QueryDSL: 尽量不使用 package, 会生产 jar 文件
    - 说明: 项目在 compile 会执行 apt-maven-plugin 插件, 将 @Entity 注解类, 添加 Q 前缀, 存放到 target 下 generated-source 目录
    - 使用: 若项目使用了 DSL, 先执行 mjava compile, 获取 BaseDTO 转 QBaseDTO. 再执行当前项目 compile, 获取 Q... 类型安全的实体查询类
    - *实体若不直接在 com.malk 下, 可声明继承id, 避免编辑器提示 [不加也不影响编译以及运行]. 若是执行 package, 会先执行 compile

3. *启动文件 Boot
    - JPA 已配置扫描基础路径, 涉及子项目也能注册到, 避免启动报错
    - 子项目 Boot 配置 @SpringBootApplication(scanBasePackages = {"com.malk"}), 扫描公共模块

4. 静态资源映射
    - 静态资源读取是 target 内容, 无需使用 package, 使用 compile 即可, 不会生产 jar 文件
    - mjava 已配置映射路径, 优先读取子项目对应路径内容, 若不存在则会读取 mjava.jar 路径内容, 未匹配则会 404

5. *环境变量: [包含其它文件]
    - 若子项目没有指定, mjava 内存在的文件, 则会加载 mjava 环境文件
    - 若子项目存在同名文件, 则会全量覆盖, 以子项目为准. 仅需配置对应环境即可

6. 代理配置
    - 内网穿透详见, `remark.md`
    - nginx 配置可参考 `nginx` 文件夹

7. pom 特别说明
    - 目前配置全部子项目均可独立运行, 需要两个注意事项
    - 第一: mjava 发布作为基础包提供, 注释 pom 内 executions 再执行 install 到本地 maven. 若开启即可作为独立 jar 运行
    - 第二: 若关联 mjava 需要有与之相同的依赖, 否则调试可运行, 打包报错. 为了避免重复添加, 将 mjava 依赖直接添加到主项目 pom 上
    - 项目被依赖 mjava 是通过 jar, 修改后执行 install 后关联项目才能获取到更新 [保留 mjava 是为了开发效率, 请勿随意修改]

8. 关于mjs
    - 本地 js-mcli: http://127.0.0.1:7001/dist/mjs.js
    - 本地 java-mcli: http://localhost:9001/dev/mjs/mjs.js
    - 本地 nginx: https://mc.100ali.com/dev/mjs/mjs.min.js
    - 特别说明: 先读取当前子项目的配置, 若依赖 mjava, 当前子项目没有该文件会继续读取 mjava 配置

### 功能

快速开发底座, 集成三方平台标准化接口和曹操作逻辑 目前对接的三方平台有: 钉钉, 宜搭, 用友u8\yonsuite, 飞书平台

### 技术

1. 并发和异步实现 `@Async`
2. 函数式编程 `Lambda`
3. 入参校验配置 `@Validated` 注解
4. 统一错误拦截 `CatchException` 类, 通用返回和报错格式
5. 数据库操作 `jpa`, `QueryDSL` 工具
6. JSON数据操作 `fastjson` 阿里巴巴
7. 工具集: `commons-lang3`, `hutool-all`
8. 基于 `winsw`, 在 `windows` 服务器部署能力
9. 通用网络请求 `UtilHttp`, 上传下载, post和get请求
10. 标准导入导出, 导入基于 `EastExcel`, 做了 `Lambda` 封装. 导出可用基于 `EasyExcel` 或 `POI`
11. 三方接口, 统一的Toke过期时间管理, 避免限流和无效token
12. 通用日志, 环境变量配置, 实现主子项目解耦. 当前每一个子项目对应一个客户, 子项目 `mjava` 也可独立部署, 提供平台通用接口服务
13.

### 配置

1. 通用路径
    - 日志路径： /Users/malk/server/_Tool/var/mjava/log
    - 文件路径： Users/malk/server/_Tool/var/mjava/tmp

2. 超时
    - nginx：如pass_proxy 配置超时5分钟
    - web：设置超时5分钟
    - server：设置超时5分钟 `timeOut`
    - server: 异步线程批量等待超时为10分钟 `timeAwait`

<br />

> 20220529 malk

<br />


next maven 私服

1. 暂未配置 deploy

3. 福氏nginx直接监听端口, 实现https
4. 当前子项目都依赖Tomcat, 导致jar过大, 是不是考虑弄一个通用docker

> update

1. 新增jsp
2. 新增swagger
3. 新增webservice