Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shiyindaxiaojie/eden-demo-mvc
阿里巴巴 MVC 架构,根据阿里云项目脚手架搭建。
https://github.com/shiyindaxiaojie/eden-demo-mvc
alibaba architect demo mvc
Last synced: 3 months ago
JSON representation
阿里巴巴 MVC 架构,根据阿里云项目脚手架搭建。
- Host: GitHub
- URL: https://github.com/shiyindaxiaojie/eden-demo-mvc
- Owner: shiyindaxiaojie
- License: apache-2.0
- Created: 2022-02-06T11:01:43.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-08-22T06:33:08.000Z (5 months ago)
- Last Synced: 2024-08-22T10:37:41.213Z (5 months ago)
- Topics: alibaba, architect, demo, mvc
- Language: Shell
- Homepage:
- Size: 741 KB
- Stars: 6
- Watchers: 0
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README-zh-CN.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
README
[license-apache2.0]:https://www.apache.org/licenses/LICENSE-2.0.html
[github-action]:https://github.com/shiyindaxiaojie/eden-demo-mvc/actions
[sonarcloud-dashboard]:https://sonarcloud.io/dashboard?id=shiyindaxiaojie_eden-demo-mvc
# 分层架构
![](https://cdn.jsdelivr.net/gh/shiyindaxiaojie/images/readme/language-java-blue.svg) [![](https://cdn.jsdelivr.net/gh/shiyindaxiaojie/images/readme/license-apache2.0-red.svg)][license-apache2.0] [![](https://github.com/shiyindaxiaojie/eden-demo-mvc/workflows/build/badge.svg)][github-action] [![](https://sonarcloud.io/api/project_badges/measure?project=shiyindaxiaojie_eden-demo-mvc&metric=alert_status)][sonarcloud-dashboard]
本项目使用 MVC 架构构建,MVC 架构是一种面向数据模型的传统架构风格,默认上层依赖于下层,例如控制层依赖业务层、业务层又依赖数据模型层,在垂直业务领域能够满足单一职责原则,通过
Maven 多模块化的开发模式,可以帮助降低复杂应用场景的系统熵值,提升系统开发和运维效率。> 参考文档请查看 [WIKI](https://github.com/shiyindaxiaojie/eden-demo-mvc/wiki) 。
## 组件构成
![](https://cdn.jsdelivr.net/gh/shiyindaxiaojie/images/eden-demo-mvc/component.png)
* **eden-demo-mvc-dao**:数据持久层,与底层 MySQL 进行数据交互。
* **eden-demo-mvc-service**:业务逻辑服务层
* **eden-demo-mvc-web**:请求控制层,对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等
* **eden-demo-mvc-start**:程序启动入口## 运行流程
![](https://cdn.jsdelivr.net/gh/shiyindaxiaojie/images/eden-demo-mvc/sequence.png)
## 如何构建
由于 `Spring Boot 2.4.x` 和 `Spring Boot 3.0.x` 在架构层面有很大的变更,因此笔者采取跟 Spring Boot 版本号一致的分支:
* 2.4.x 分支适用于 `Spring Boot 2.4.x`,最低支持 JDK 1.8。
* 2.7.x 分支适用于 `Spring Boot 2.7.x`,最低支持 JDK 11。
* 3.0.x 分支适用于 `Spring Boot 3.0.x`,最低支持 JDK 17。本项目默认使用 Maven 来构建,最快的使用方式是 `git clone`
到本地。为了简化不必要的技术细节,本项目依赖 [eden-architect](https://github.com/shiyindaxiaojie/eden-architect)
,在项目的根目录执行 `mvn install -T 4C` 完成本项目的构建。## 如何启动
### 快速体验
本项目默认设置了 dev 环境运行,所有外部的组件依赖均为关闭状态。
1. 在项目目录下运行 `mvn install`(如果不想运行测试,可以加上 `-DskipTests` 参数)。
2. 进入 `eden-demo-mvc-start` 目录,执行 `mvn spring-boot:run` 或者启动 `MvcApplication`
类。运行成功的话,可以看到 `Spring Boot` 启动成功的界面。
3. 本应用中已经实现了一个简单的 `RestController` 接口,可以点击 [演示接口](http://localhost:8083/api/users/1) 进行调试。
4. 由于目前的主流是前后端分离开发,请按需实现页面。访问 [http://localhost:8083](http://localhost:8083) 将跳转到 404 页面。![](https://cdn.jsdelivr.net/gh/shiyindaxiaojie/images/common/404.png)
### 微调配置
**修改默认的数据源**:本项目默认使用 `H2` 内存数据库启动,基于 `Liquibase` 在项目启动时自动初始化 SQL 脚本。如果您使用的是外部的 MySQL 数据库,可以从此处调整下数据库的连接信息:[application-dev.yml](https://github.com/shiyindaxiaojie/eden-demo-mvc/blob/main/eden-demo-mvc-start/src/main/resources/config/application-dev.yml),请删除任何与 `H2` 有关的配置。
```yaml
spring:
# h2: # 内存数据库
# console:
# enabled: true # 线上环境请勿设置
# path: /h2-console
# settings:
# trace: false
# web-allow-others: false
datasource: # 数据源管理
username:
password:
url: jdbc:mysql://host:port/schema?rewriteBatchedStatements=true&useSSL=false&useOldAliasMetadataBehavior=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
```此外,本项目还罗列了 `Redis` 缓存、`RocketMQ` 消息队列、`ShardingSphere`
分库分表等常用组件的使用方案,默认通过 `xxx.enabled` 关闭自动配置。您可以根据实际情况开启配置,直接完成组件的集成。## 版本规范
项目的版本号格式为 `x.y.z` 的形式,其中 x 的数值类型为数字,从 0 开始取值,且不限于 0~9 这个范围。项目处于孵化器阶段时,第一位版本号固定使用
0,即版本号为 `0.x.x` 的格式。* 孵化版本:0.0.1-SNAPSHOT
* 开发版本:1.0.0-SNAPSHOT
* 发布版本:1.0.0版本迭代规则:
* 1.0.0 <> 1.0.1:兼容
* 1.0.0 <> 1.1.0:基本兼容
* 1.0.0 <> 2.0.0:不兼容## 持续集成
> CI/CD 工具选型:Jenkins、Zadig、CODING、Codeup
### CODING 持续交付
下图演示基于 CODING 实现持续构建、持续部署的效果
![](https://cdn.jsdelivr.net/gh/shiyindaxiaojie/images/common/coding-cicd.png)
![](https://cdn.jsdelivr.net/gh/shiyindaxiaojie/images/common/coding-test-report.png)
### Codeup 持续集成
> TODO, Coming soon
## 最佳实践
### Git 多人协作分支管理
在敏捷开发盛行的时代,`GitFlow` 显得力不从心,笔者为团队制定了一套简单易用的流程。
![](https://cdn.jsdelivr.net/gh/shiyindaxiaojie/images/processon/git-action.png)
### CAT 可观测性方案
通过 `TraceId` 分析整个链路的 `HTTP` 请求耗时、`RPC` 调用情况、`Log` 业务日志、`SQL` 和 `Cache`
执行耗时。[传送门](https://github.com/shiyindaxiaojie/cat)![](https://cdn.jsdelivr.net/gh/shiyindaxiaojie/images/cat/tracing.png)
### Arthas 在线诊断工具
使用动态时运行探针,自动发现服务,开箱即用,允许在低负载环境诊断你的应用。[传送门](https://github.com/shiyindaxiaojie/arthas)
![](https://cdn.jsdelivr.net/gh/shiyindaxiaojie/images/arthas/arthas-dashboard-overview.png)
## 变更日志
请查阅 [CHANGELOG.md](https://github.com/shiyindaxiaojie/eden-demo-mvc/blob/main/CHANGELOG.md)