Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions docs/framework-1.1-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Java 21 为编译和最低运行基线,以 JDK 21、25 为 CI 保障版本;J
| Spring Cloud | 2025.1.2 | 2025.1.2 | 已官方声明支持 Boot 4.1 |
| Spring Cloud Alibaba | 2025.1.0.0 | 待正式兼容版本 | 不使用上游 SNAPSHOT 发布 |
| Java | 21 | 编译 21;CI 21/25 | 两套完整构建、测试和 Javadoc 通过 |
| 镜像 | Temurin 21 Alpine JVM | JDK/JRE 25 JVM;Linux amd64 Native | 非 root、日志、时区、健康检查均验证 |
| 镜像 | Temurin 21 Alpine JVM | Temurin 25 Alpine JVM | 非 root、日志、时区、健康检查及容器内存参数均验证 |

Spring Cloud Alibaba 的公开 2025.1.0.0 版本表只声明支持 Boot 4.0.x;其 `2025.1.x` 分支虽已
切换到 Boot 4.1.0 和 Cloud 2025.1.2,但尚未发布为正式 BOM。Framework 可在保持已发布
Expand All @@ -23,7 +23,7 @@ Spring Cloud Alibaba 的公开 2025.1.0.0 版本表只声明支持 Boot 4.0.x;

### 阶段 1:构建矩阵与可复现基线(进行中)

1. 在 `feature/1.1` 分支上维护所有变更,发布前再创建 `release/1.1.0`。
1. 1.1.0 已作为升级基线发布;后续优化在 `feature/1.1.1-jvm-optimization` 上维护。
2. GitHub Actions 建立 JDK 21/25 矩阵,运行 `mvn -B verify javadoc:javadoc --file pom.xml`。
3. 在两套 JDK 下记录 Framework 全模块构建结果;任何 JDK 25 特有失败先修复构建插件或测试。

Expand All @@ -41,7 +41,7 @@ Spring Cloud Alibaba 的公开 2025.1.0.0 版本表只声明支持 Boot 4.0.x;

完成标准:JDK 21/25 的全模块 `verify` 与 Javadoc 均通过,且没有未解释的依赖覆盖。

### 阶段 3:Native 能力和 Runtime Hints
### 阶段 3:Native 能力和 Runtime Hints(延期)

1. 复用 Spring Boot 4.1 的 Native Build Tools 路径,提供可选 `-Pnative`,不改变默认 JVM 构建。
2. 以已有 Native 原型的 base 应用为验证样本;将反射、代理、资源和序列化问题收敛为各 Starter
Expand All @@ -51,13 +51,13 @@ Spring Cloud Alibaba 的公开 2025.1.0.0 版本表只声明支持 Boot 4.0.x;

完成标准:样本应用可由文档化命令构建并运行 Native,核心链路有自动化或可重复的集成验证。

### 阶段 4:JVM 25 / Native OCI 镜像
### 阶段 4:JVM 25 OCI 镜像(1.1.1)

1. 在现有 Jib 所有权扩展、非 root `1001`、`${REGISTRY_URL}`、认证、版本/latest 标签和
`/app/logs` 卷基础上扩展,不另建平行发布链路。
2. JVM profile 默认使用可配置的 JDK/JRE 25 基础镜像;Native profile 使用无 JDK 的最小 Linux
2. JVM profile 默认使用可配置的 JDK/JRE 25 基础镜像;Native profile 不在 1.1.1 范围内。
运行时镜像,并显式保留 CA 证书、时区和必要字体。
3. 对两种镜像验证用户、入口命令、端口、health、配置和日志,并记录层复用率。
3. 对 JVM 镜像验证用户、入口命令、端口、health、配置、日志和 JVM 内存边界,并记录层复用率。

完成标准:两种镜像均以非 root 启动,现有 Registry 和日志约定不被破坏。

Expand All @@ -66,7 +66,7 @@ Spring Cloud Alibaba 的公开 2025.1.0.0 版本表只声明支持 Boot 4.0.x;
1. 用候选 Framework 版本在本地升级至少一个受影响 base 应用;启动其配置中心与依赖服务,确认
实际订阅预期 Nacos Data ID,再测试受保护接口等关键链路。
2. 记录 1.0.0 与 1.1 的镜像大小、压缩推送大小、启动时间和空载内存,注明环境和测量命令。
3. 完成升级指南、Native/Jib 使用指南、版本矩阵、变更日志、回滚与降级清单。
3. 完成升级指南、Jib 使用指南、版本矩阵、变更日志、回滚与降级清单。
4. 经维护者确认后推送候选分支;CI 成功且再次确认后才创建 Release、Maven Central 发布和分支合并。

完成标准:Issue #64 全部验收项有链接到测试、命令、基准和文档的证据;发布动作仍须单独审批。
Expand Down
9 changes: 6 additions & 3 deletions docs/migration-1.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ Spring Cloud 2025.1.2 已支持 Spring Boot 4.1。Spring Cloud Alibaba 的已发

## 应用升级步骤

1. 将父 POM 或 BOM 更新至 Framework 1.1 候选版本,保留 `maven.compiler.release` 为 `21`。
1. 将父 POM 或 BOM 更新至 Framework 1.1.1,保留 `maven.compiler.release` 为 `21`。
2. 在 JDK 21、JDK 25 分别执行应用的 `mvn test`;业务使用 Spring Cloud Alibaba 时,至少启动一次
使用真实 Nacos Config Data 的集成环境。
3. 验证配置实际订阅预期 Nacos Data ID、服务注册、数据库、缓存、RPC、鉴权和健康检查。
4. 若应用使用反射、JDK 动态代理、资源扫描或动态序列化,在 Native 阶段将所需提示提交到对应
4. 若应用使用反射、JDK 动态代理、资源扫描或动态序列化,在后续 Native 阶段将所需提示提交到对应
Framework Starter,而不是在每个应用复制 `reflect-config.json`。

## Nacos 公共配置
Expand Down Expand Up @@ -53,6 +53,9 @@ GitHub Actions 对 JDK 21 和 JDK 25 执行相同命令。发布前还必须完

## 已知限制

- 此阶段不改变默认 JVM 打包路径;Native Image 和双模式 OCI 镜像将作为独立阶段交付。
- 1.1.1 将默认 JVM 运行时切换为 `eclipse-temurin:25-jre-alpine`,并设置容器内存比例(初始 10%,最大 60%)、线程栈 `256k`、Metaspace 上限 `128m`、Direct Memory 上限 `128m` 及 OOM 退出策略。应用可通过 Jib 属性覆盖这些默认值;使用大量线程、动态代理或 Netty 的应用应在压测后调整。
- Native Image 暂不纳入 1.1.1 发布范围,保留为后续专项工作;MyBatis-Plus、Nacos、Sentinel 的 Native 兼容性需要独立验证。
- Sentinel 依赖在 `opensabre-starter-rpc` 中改为可选依赖,不再默认进入应用镜像;需要 Sentinel 的应用必须显式声明对应依赖,并在部署层启用 Sentinel 控制台。
- AppCDS 试点结论:Spring Boot fat jar 直接生成的归档与 Jib exploded classpath 不一致,不能直接复用。后续应在 Jib 的 `/app/classes:/app/resources:/app/libs/*` 布局上按应用生成归档,并作为显式 profile 启用,暂不作为默认镜像内容。
- Spring Cloud Alibaba 的正式 Boot 4.1 认证尚待其上游发布,不能据此直接宣称所有 Alibaba 组件已
获完整生产认证。
3 changes: 2 additions & 1 deletion docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

- 逐个 Starter 完成独立模块文档与可运行示例的双向链接。
- 建立 Spring Boot、Spring Cloud、Java 版本的兼容性矩阵。
- [Framework 1.1 升级实施计划](framework-1.1-plan.md):Boot 4.1、JDK 21/25、Native Image 与双模式 OCI 镜像的阶段门禁。
- [Framework 1.1 升级实施计划](framework-1.1-plan.md):Boot 4.1 与 JDK 21/25 的升级基线。
- Framework 1.1.1:默认 Java 25 JVM 镜像、容器内存参数与镜像体积优化;Native Image 暂缓。
- 为自动配置、配置项、公共 API 建立弃用和迁移策略。
- 将审计、事件、缓存、持久化等跨模块能力形成端到端参考实现。
18 changes: 16 additions & 2 deletions opensabre-base-dependencies/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,12 @@
<guava.version>33.4.0-jre</guava.version>
<jasypt-springboot.version>3.0.5</jasypt-springboot.version>
<jib-maven-plugin.version>3.5.2</jib-maven-plugin.version>
<jib.base.image>eclipse-temurin:25-jre-alpine</jib.base.image>
<jib.jvm.initial-ram-percentage>10</jib.jvm.initial-ram-percentage>
<jib.jvm.max-ram-percentage>60</jib.jvm.max-ram-percentage>
<jib.jvm.stack-size>256k</jib.jvm.stack-size>
<jib.jvm.max-metaspace-size>128m</jib.jvm.max-metaspace-size>
<jib.jvm.max-direct-memory-size>128m</jib.jvm.max-direct-memory-size>
<!-- 测试 -->
<junit-jupiter.version>5.11.4</junit-jupiter.version>
<httpclient5.version>5.4.1</httpclient5.version>
Expand Down Expand Up @@ -331,7 +337,7 @@
</pluginExtensions>
<!-- 基础镜像 -->
<from>
<image>eclipse-temurin:21-jre-alpine</image>
<image>${jib.base.image}</image>
</from>
<!-- 目标镜像 -->
<to>
Expand All @@ -353,7 +359,15 @@
<!-- 设置时区 -->
<TZ>Asia/Shanghai</TZ>
</environment>
<jvmFlags>-XX:+UseContainerSupport</jvmFlags>
<jvmFlags>
<jvmFlag>-XX:+UseContainerSupport</jvmFlag>
<jvmFlag>-XX:InitialRAMPercentage=${jib.jvm.initial-ram-percentage}</jvmFlag>
<jvmFlag>-XX:MaxRAMPercentage=${jib.jvm.max-ram-percentage}</jvmFlag>
<jvmFlag>-Xss${jib.jvm.stack-size}</jvmFlag>
<jvmFlag>-XX:MaxMetaspaceSize=${jib.jvm.max-metaspace-size}</jvmFlag>
<jvmFlag>-XX:MaxDirectMemorySize=${jib.jvm.max-direct-memory-size}</jvmFlag>
<jvmFlag>-XX:+ExitOnOutOfMemoryError</jvmFlag>
</jvmFlags>
<creationTime>USE_CURRENT_TIMESTAMP</creationTime>
</container>
</configuration>
Expand Down
3 changes: 3 additions & 0 deletions opensabre-starter-rpc/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,19 @@
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<optional>true</optional>
</dependency>
<!--服务调用熔断降级规则数据源-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
<optional>true</optional>
</dependency>
<!-- Sentinel数据源之 Nacos -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import io.github.opensabre.rpc.sentinel.exception.SentinelExceptionHandlerAdvice;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Import;

@AutoConfiguration
@ConditionalOnClass(name = "com.alibaba.csp.sentinel.slots.block.BlockException")
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@Import({SentinelExceptionHandlerAdvice.class})
public class OpensabreSentinelConfig {
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
<central-publishing-maven-plugin.version>0.9.0</central-publishing-maven-plugin.version>
<lombok.version>1.18.42</lombok.version>

<revision>1.1.0</revision>
<revision>1.1.1</revision>
</properties>

<!-- 发布配置 -->
Expand Down
Loading