# spring-cloud-xuxiaowei **Repository Path**: JOSONS/spring-cloud-xuxiaowei ## Basic Information - **Project Name**: spring-cloud-xuxiaowei - **Description**: Spring Boot 2/3 微服务 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: spring-boot-2 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 12 - **Created**: 2024-04-11 - **Last Updated**: 2024-04-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
## 文档 | 平台 | 链接 | 说明 | |----------------|-----------------------------------------------------------------|-------| | Gitee Pages | [链接](https://xuxiaowei-cloud.gitee.io/spring-cloud-xuxiaowei/) | 自动化部署 | | GitHub Pages | [链接](https://xuxiaowei-cloud.github.io/spring-cloud-xuxiaowei/) | 自动化部署 | | FramaGit Pages | [链接](https://xuxiaowei-cloud.frama.io/spring-cloud-xuxiaowei/) | 自动化部署 | ## 项目说明 1. 本项目为重构项目,与原始项目存在较大差异 2. 本项目从头开发,在 [B站](https://www.bilibili.com/) 有配套视频(充电专属) 1. 搜索 [重构微服务](https://search.bilibili.com/video?keyword=%E9%87%8D%E6%9E%84%E5%BE%AE%E6%9C%8D%E5%8A%A1) 2. 查看 [充电专属视频](https://space.bilibili.com/198580655) 3. 表结构、数据(包含 Nacos 配置)在 [sql](sql) 文件夹 4. [CodeCov 代码覆盖率](https://app.codecov.io/gh/xuxiaowei-cloud/spring-cloud-xuxiaowei/) 5. 原始项目地址: | | Gitee | GitHub | |---------------|--------------------------------------------------------------|---------------------------------------------------------------| | Spring Boot 2 | [链接](https://gitee.com/xuxiaowei-cloud/xuxiaowei-cloud) | [链接](https://github.com/xuxiaowei-cloud/xuxiaowei-cloud) | | Spring Boot 3 | [链接](https://gitee.com/xuxiaowei-cloud/xuxiaowei-cloud-next) | [链接](https://github.com/xuxiaowei-cloud/xuxiaowei-cloud-next) | ## 项目开发的原则 ### 分支 1. 功能同时更新 `spring-boot-2`、`spring-boot-3` 两个分支 2. 先开发 `spring-boot-2` 分支,然后使用 `git cherry-pick`(`摘樱桃`) 将功能同步到 `spring-boot-3` 分支,并根据代码内容做调整 ### 依赖 1. Spring 全家桶(不使用 `Shiro` 等其他安全框架) 1. Spring Security 2. Spring Security OAuth2 Authorization Server(OAuth 2.1) 2. 尽量少的使用其他依赖 1. 使用 `springdoc` 生成 API 文档:支持 `OpenAPI 3`、`Swagger-ui`、`OAuth 2.1` 等 2. JSON 处理使用 `jackson` 的 `ObjectMapper`,不使用 `fastjson`、`hutool` 等 3. 连接池使用 Spring Boot 默认的 `hikari`,不使用 `druid` 4. HTTP 请求使用 Spring 的 `RestTemplate` 或 `WebClient`,不使用 `httpclient`、`hutool` 等 5. Redis 操作使用 Spring 的 `StringRedisTemplate`、`RedisTemplate` 6. 其他工具类使用 `org.apache.commons:commons-lang3` 和 `com.google.guava:guava`,不使用 `hutool` 等 3. 已上依赖不能满足的情况,自己写,并且包含完善的测试类 4. 依赖保存最新 1. 使用 [dependabot.yml](.github/dependabot.yml) `检测依赖升级`、`创建升级依赖PR`,`执行自动化测试`,`人工审核`, 通过后合并到目标分支 ### 代码格式 1. Java 使用 [spring-javaformat](https://github.com/spring-io/spring-javaformat/) 1. Spring 提供:IntelliJ IDEA、Visual Studio Code、Eclipse 插件,可在开发过程中对代码进行格式化,插件请与项目依赖保持一致 2. IDEA 插件下载地址(下载最大的文件): [spring-javaformat-intellij-idea-plugin](https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-intellij-idea-plugin/) 3. 可使用 `mvn` 命令格式化 Java 代码:需要当前操作系统可以正常执行 `mvn` 命令 ```shell mvn spring-javaformat:apply ``` 2. Node 使用 [prettier](https://github.com/prettier/prettier) ### 功能 1. 每开发一个功能,要包含详细的自动化测试 2. 每发现一个bug,修复时要包含详细的自动化测试,测试内容包含能复现 bug 的测试 3. [十二要素应用宣言](https://12factor.net/zh_cn/) 1. [I. 基准代码](https://12factor.net/zh_cn/codebase) 一份基准代码(Codebase),多份部署(deploy) 2. [II. 依赖](https://12factor.net/zh_cn/dependencies) 显式声明依赖关系 3. [III. 配置](https://12factor.net/zh_cn/config) 在环境中存储配置 4. [V. 构建,发布,运行](https://12factor.net/zh_cn/build-release-run) 严格分离构建和运行 5. [X. 开发环境与线上环境等价](https://12factor.net/zh_cn/dev-prod-parity) 尽可能的保持开发,预发布,线上环境相同 4. 评价一个项目是否优秀的其中一个因素:在不修改基础代码和基础数据的情况下,是否可以随时开源 ### 自动化流水线 #### 测试 - 测试开始时,创建一个空的 MySQL 数据库,自动化脚本创建数据库与表结构,导入基础数据,然后再打包,运行单元测试、集成测试 - 测试开始时,创建 Redis,用于后续自动化测试 | 类型 | 流水线配置文件 | 流水线运行记录 | |-------------|----------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------| | GitLab 流水线 | [.gitlab-ci.yml](.gitlab-ci.yml) | [GitLab Pipelines](https://jihulab.com/xuxiaowei-jihu/xuxiaowei-cloud/spring-cloud-xuxiaowei/-/pipelines?page=1&scope=all&ref=spring-boot-2) | | GitHub 流水线 | [maven-spring-boot-2.yml](.github/workflows/maven-spring-boot-2.yml) | [GitHub Actions](https://github.com/xuxiaowei-cloud/spring-cloud-xuxiaowei/actions/workflows/maven-spring-boot-2.yml) | | Jenkins 流水线 | [Jenkinsfile](Jenkinsfile) | 无公开服务 | ## 项目功能 ### OAuth 2.1 - 基于 OAuth 2.1 的 0.4.5 标签默认示例配置 - 其中 `bWVzc2FnaW5nLWNsaWVudDpzZWNyZXQ=` 是 `客户ID:客户秘钥` `messaging-client:secret` 计算 base64 得到的 | 名称 | 值 | 自动化测试 | |-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| | 用户名 | user1 | | | 密码 | password | | | 客户ID | messaging-client | | | 客户秘钥 | secret | | | 客户认证方式 | client_secret_basic | | | 客户授权方式 | authorization_code、refresh_token、client_credentials | | | 客户回调地址 | http://127.0.0.1:8080/login/oauth2/code/messaging-client-oidc , http://127.0.0.1:8080/authorized , https://home.baidu.com/home/index/contact_us | | | 客户授权范围 | openid、profile、message.read、message.write | | | 客户手动授权同意 | true | | | 授权请求 URL | http://127.0.0.1:9000/oauth2/authorize?client_id=messaging-client&redirect_uri=https://home.baidu.com/home/index/contact_us&response_type=code&scope=openid%20profile%20message.read%20message.write&state=beff3dfc-bad8-40db-b25f-e5459e3d6ad7 | | | 授权码获取 Token URL | curl --request POST --url http://127.0.0.1:9000/oauth2/token --header 'Authorization: Basic bWVzc2FnaW5nLWNsaWVudDpzZWNyZXQ=' --header 'content-type: multipart/form-data' --form redirect_uri=https://home.baidu.com/home/index/contact_us --form grant_type=authorization_code --form code=你的授权码 | [AuthorizationCodeTests.java](spring-cloud-xuxiaowei-passport/src/test/java/cloud/xuxiaowei/passport/oauth/AuthorizationCodeTests.java) | | 刷新 Token URL | curl --request POST --url http://127.0.0.1:9000/oauth2/token --header 'Authorization: Basic bWVzc2FnaW5nLWNsaWVudDpzZWNyZXQ=' --header 'content-type: multipart/form-data' --form grant_type=refresh_token --form refresh_token=你的刷新Token | [AuthorizationCodeTests.java](spring-cloud-xuxiaowei-passport/src/test/java/cloud/xuxiaowei/passport/oauth/AuthorizationCodeTests.java) | | 凭证式 URL | curl --request POST --url http://127.0.0.1:9000/oauth2/token --header 'Authorization: Basic bWVzc2FnaW5nLWNsaWVudDpzZWNyZXQ=' --header 'content-type: multipart/form-data' --form scope="openid profile message.read message.write" --form grant_type=client_credentials | [ClientCredentialsTests.java](spring-cloud-xuxiaowei-passport/src/test/java/cloud/xuxiaowei/passport/oauth/ClientCredentialsTests.java) | ### Springdoc (API) | Name | 服务 | 地址 | 说明 | |----------|--------|-----------------------------------------------------|------------------| | gateway | 网关 | http://127.0.0.1:8000/webjars/swagger-ui/index.html | 网关聚合所有服务的 API 文档 | | passport | 登录授权服务 | http://127.0.0.1:9000/swagger-ui/index.html | | | file | 文件服务 | http://127.0.0.1:12000/swagger-ui/index.html | |