链接 | 说明 | |
---|---|---|
文档 | 链接 | 自动化部署 |
GitHub Pages | 链接 | 自动化部署 |
FramaGit Pages | 链接 | 自动化部署 |
- 本项目为重构项目,与原始项目存在较大差异
- 本项目从头开发,在 B站 有配套视频(充电专属)
- 表结构、数据(包含 Nacos 配置)在 sql 文件夹
- CodeCov 代码覆盖率
- 原始项目地址:
Gitee | GitHub | |
---|---|---|
Spring Boot 2 | 链接 | 链接 |
Spring Boot 3 | 链接 | 链接 |
- 功能同时更新
spring-boot-2
、spring-boot-3
两个分支 - 先开发
spring-boot-2
分支,然后使用git cherry-pick
(摘樱桃
) 将功能同步到spring-boot-3
分支,并根据代码内容做调整
- Spring 全家桶(不使用
Shiro
等其他安全框架)- Spring Security
- Spring Security OAuth2 Authorization Server(OAuth 2.1)
- 尽量少的使用其他依赖
- 使用
springdoc
生成 API 文档:支持OpenAPI 3
、Swagger-ui
、OAuth 2.1
等 - JSON 处理使用
jackson
的ObjectMapper
,不使用fastjson
、hutool
等 - XML 处理使用
jackson
的XmlMapper
,不使用hutool
等 - 连接池使用 Spring Boot 默认的
hikari
,不使用druid
- HTTP 请求使用 Spring 的
RestTemplate
或WebClient
,不使用httpclient
、hutool
等 - Redis 操作使用 Spring 的
StringRedisTemplate
、RedisTemplate
- 其他工具类使用
org.apache.commons:commons-lang3
和com.google.guava:guava
,不使用hutool
等
- 使用
- 已上依赖不能满足的情况,自己写,并且包含完善的测试类
- 依赖保存最新
- 使用 dependabot.yml
检测依赖升级
、创建升级依赖PR
,执行自动化测试
,人工审核
, 通过后合并到目标分支
- 使用 dependabot.yml
-
Java 使用 spring-javaformat
- Spring 提供:IntelliJ IDEA、Visual Studio Code、Eclipse 插件,可在开发过程中对代码进行格式化,插件请与项目依赖保持一致
- IDEA 插件下载地址(下载最大的文件): spring-javaformat-intellij-idea-plugin
- 可使用
mvn
命令格式化 Java 代码:需要当前操作系统可以正常执行mvn
命令mvn spring-javaformat:apply
-
Node 使用 prettier
- 每开发一个功能,要包含详细的自动化测试
- 每发现一个bug,修复时要包含详细的自动化测试,测试内容包含能复现 bug 的测试
- 十二要素应用宣言
- I. 基准代码 一份基准代码(Codebase),多份部署(deploy)
- II. 依赖 显式声明依赖关系
- III. 配置 在环境中存储配置
- V. 构建,发布,运行 严格分离构建和运行
- X. 开发环境与线上环境等价 尽可能的保持开发,预发布,线上环境相同
- 评价一个项目是否优秀的其中一个因素:在不修改基础代码和基础数据的情况下,是否可以随时开源
- 测试开始时,创建一个空的 MySQL 数据库,自动化脚本创建数据库与表结构,导入基础数据,然后再打包,运行单元测试、集成测试
- 测试开始时,创建 Redis,用于后续自动化测试
类型 | 流水线配置文件 | 流水线运行记录 |
---|---|---|
GitLab 流水线 | .gitlab-ci.yml | GitLab Pipelines |
GitHub 流水线 | maven-spring-boot-2.yml | GitHub Actions |
Jenkins 流水线 | Jenkinsfile | Jenkins Build |
- 基于 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 |
刷新 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 |
凭证式 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 |
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 |