# sc-template **Repository Path**: imnewsea/sc-template ## Basic Information - **Project Name**: sc-template - **Description**: spring cloud template,标准项目模板。 脚手架的模板,用代码生成器,生成大部分通用代码。包含常用中间件的Demo。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2022-10-21 - **Last Updated**: 2022-11-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一.工程说明 该工程是一个多模块标准模板,用于指导脚手架及代码生成器。以及集成所需的中间件件Demo。 ### base/common 该项目会移除脚手架,单独建仓库并上传到私服,各应用引入即可。 # 二. 基本原则 - 如果有多个模块, 参考 admin 结构创建。 - 产品本身没有更改数据库的要求,利用 MybatisPlus本身的优点,尽量不使用对象方式操作复杂的Sql,直接写Sql。 - 使用 Lombok 简化开发。 ### @Autowired 警告 - 针对 @Autowired 警告,改用 @RequiredArgsConstructor,对Bean添加 @NotNull 注解 - ### MybatisPlus生成器 代码生成器在 config test 中。 - 模块的实体, 放入相应的 entity - 模块的 Service,Mapper 放到模块api - 默认生成的 Controller 是空类文件。缺少CRUD。按项目的最佳实践手工补充。 # 三. 最佳实践 ## 日志 ### 系统请求日志 有三个地方: * Nginx反向代理:建议,性能最高;比较集中,一般只有一个Nginx入口;使用FileBeat传输到Es * 网关Gateway: 如果是一级网关,也比较集中,用 FileBeat把日志传输到Es。 * 各应用:比较分散,不建议。 ### 业务日志 各各应自行实现,实现过程(用RabbitMq实现削峰): 准备: 1. 每个产品线定义一个编码 code 2. Mq创建 VirtualHost = code ,实现Mq数据隔离。 3. 每个产品线启动一个消费者(固定微服务),负责把把 VirtualHost=code 中 log 消息发送到 Es 中的 ${code}-log 索引上 (也可以对Es集群按产品线隔离) 4. 开发一个 log-sender 组件,完成把消息推送到 VirtualHost=code 中 log 队列中。 各应用开发: 1. 配置产品线code 2. 集成 log-sender 3. 调用 log-sender 组件方法,把要记录业务日志发送过去。 ### 获取当前登录用户 Mvc接口中,直接使用 LoginUserModel ### 原生sql方式 和 对象查询方式 的区别 | 项目 | 原生sql方式 | 原生Sql方式说明 | 对象查询方式 | 对象查询方式说明 | |-----|---------|--------------------|--------|--------------------| | 开发 | 开发灵活 | 原生方式很直接 | 开发工作量大 | 对象操作的方式非常困难。 | | 重构 | 不利于重构 | 需要人工检查相关表及列,编译时不报错 | 利于重构。 | 更换数据库改动很少,重构编译会报错。 |