11 KiB
TongWeb自启动适配后端 Implementation Plan
For agentic workers: REQUIRED: Use
superpowers:executing-plansto implement this plan. Repository policy inAGENTS.mdforbids subagents. Steps use checkbox (- [ ]) syntax for tracking.
Goal: 在 ruoyi-admin 模块中接入 TongWeb Spring Boot Starter,替换默认内嵌 Tomcat,并让 Tongweb_license.dat 通过 classpath 生效,同时保持现有 java -jar 自启动方式不变。
Architecture: 方案只落在 ruoyi-admin 模块。通过调整 ruoyi-admin/pom.xml 的运行时依赖与资源打包规则,将 TongWeb 作为唯一内嵌容器,并在 application-dev.yml、application-uat.yml、application-pro.yml 中统一声明 server.tongweb.license.path。验证分为资源存在性测试、环境配置测试、构建产物检查和本地启动验证四层。
Tech Stack: Java 8, Spring Boot 2.5.15, Maven, JUnit 5, RuoYi-Vue backend (ruoyi-admin)
File Map
Create:
ruoyi-admin/src/main/resources/Tongweb_license.datruoyi-admin/src/test/java/com/ruoyi/TongWebLicenseResourceTest.javaruoyi-admin/src/test/java/com/ruoyi/TongWebYamlConfigTest.javadoc/2026-04-16-TongWeb自启动适配后端实施记录.md
Modify:
ruoyi-admin/pom.xmlruoyi-admin/src/main/resources/application-dev.ymlruoyi-admin/src/main/resources/application-uat.ymlruoyi-admin/src/main/resources/application-pro.yml
Reference:
doc/2026-04-16-TongWeb自启动适配后端设计文档.mddoc/Tongweb_license.datruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.javaruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
Task 1: 锁定 license 资源接入链路
Files:
-
Create:
ruoyi-admin/src/test/java/com/ruoyi/TongWebLicenseResourceTest.java -
Create:
ruoyi-admin/src/main/resources/Tongweb_license.dat -
Modify:
ruoyi-admin/pom.xml -
Step 1: 编写失败测试,先证明 classpath 中还没有 TongWeb license
package com.ruoyi;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import org.junit.jupiter.api.Test;
class TongWebLicenseResourceTest
{
@Test
void shouldLoadTongWebLicenseFromClasspath()
{
assertNotNull(
TongWebLicenseResourceTest.class.getClassLoader().getResource("Tongweb_license.dat"));
}
}
- Step 2: 运行单测确认当前失败
Run:
mvn -pl ruoyi-admin -Dtest=TongWebLicenseResourceTest test
Expected:
FAIL
resource "Tongweb_license.dat" is null
- Step 3: 最小实现资源接入与运行时依赖替换
在 ruoyi-admin/pom.xml 中完成以下最小改造:
- 给
ruoyi-framework依赖增加对spring-boot-starter-tomcat的排除,避免默认内嵌 Tomcat 继续进入运行时依赖树。 - 新增 TongWeb Starter 依赖:
<dependency>
<groupId>com.tongweb.springboot</groupId>
<artifactId>tongweb-spring-boot-starter-2.x</artifactId>
<version>7.0.E.7</version>
</dependency>
- 在
build中补充资源配置,确保.dat文件被正常打包:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
-
将
doc/Tongweb_license.dat原样复制到ruoyi-admin/src/main/resources/Tongweb_license.dat。 -
Step 4: 重新运行资源测试确认通过
Run:
mvn -pl ruoyi-admin -Dtest=TongWebLicenseResourceTest test
Expected:
BUILD SUCCESS
Tests run: 1, Failures: 0
- Step 5: 提交这一小步
git add ruoyi-admin/pom.xml \
ruoyi-admin/src/main/resources/Tongweb_license.dat \
ruoyi-admin/src/test/java/com/ruoyi/TongWebLicenseResourceTest.java
git commit -m "接入TongWeb依赖与许可证资源"
Task 2: 补齐多环境 TongWeb 配置
Files:
-
Create:
ruoyi-admin/src/test/java/com/ruoyi/TongWebYamlConfigTest.java -
Modify:
ruoyi-admin/src/main/resources/application-dev.yml -
Modify:
ruoyi-admin/src/main/resources/application-uat.yml -
Modify:
ruoyi-admin/src/main/resources/application-pro.yml -
Step 1: 编写失败测试,先锁定三套环境配置必须同时存在
package com.ruoyi;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.ClassPathResource;
class TongWebYamlConfigTest
{
@Test
void shouldExposeTongWebLicensePathInAllProfiles() throws Exception
{
assertEquals("classpath:Tongweb_license.dat", load("application-dev.yml"));
assertEquals("classpath:Tongweb_license.dat", load("application-uat.yml"));
assertEquals("classpath:Tongweb_license.dat", load("application-pro.yml"));
}
private String load(String fileName) throws Exception
{
YamlPropertySourceLoader loader = new YamlPropertySourceLoader();
List<PropertySource<?>> sources = loader.load(fileName, new ClassPathResource(fileName));
return (String) sources.get(0).getProperty("server.tongweb.license.path");
}
}
- Step 2: 运行单测确认当前失败
Run:
mvn -pl ruoyi-admin -Dtest=TongWebYamlConfigTest test
Expected:
FAIL
expected: classpath:Tongweb_license.dat
but was : null
- Step 3: 在三套环境配置中追加 TongWeb license 路径
在以下文件的 server: 节点下新增同一段配置:
ruoyi-admin/src/main/resources/application-dev.ymlruoyi-admin/src/main/resources/application-uat.ymlruoyi-admin/src/main/resources/application-pro.yml
新增内容:
tongweb:
license:
path: classpath:Tongweb_license.dat
要求:
-
保持现有 YAML 缩进风格。
-
不删除现有
server.tomcat.*配置。 -
不新增任何容器切换开关。
-
Step 4: 重新运行配置测试确认通过
Run:
mvn -pl ruoyi-admin -Dtest=TongWebYamlConfigTest test
Expected:
BUILD SUCCESS
Tests run: 1, Failures: 0
- Step 5: 提交这一小步
git add ruoyi-admin/src/main/resources/application-dev.yml \
ruoyi-admin/src/main/resources/application-uat.yml \
ruoyi-admin/src/main/resources/application-pro.yml \
ruoyi-admin/src/test/java/com/ruoyi/TongWebYamlConfigTest.java
git commit -m "补充TongWeb许可证配置"
Task 3: 完成构建验证与启动验证
Files:
-
Modify:
ruoyi-admin/pom.xml(如 Task 1 后仍需微调资源或依赖排除) -
Reference:
ruoyi-admin/target/ruoyi-admin.jar -
Reference:
ruoyi-admin/target/*.war -
Step 1: 运行模块构建,确认 TongWeb 依赖能够正常解析
Run:
mvn -pl ruoyi-admin -am package -DskipTests
Expected:
BUILD SUCCESS
- Step 2: 检查构建产物中确实包含 TongWeb license
Run:
jar tf ruoyi-admin/target/ruoyi-admin.jar | rg "Tongweb_license.dat"
Expected:
BOOT-INF/classes/Tongweb_license.dat
- Step 3: 检查运行时依赖树,确认默认 Tomcat 已退出主链路
Run:
mvn -pl ruoyi-admin dependency:tree -Dincludes=com.tongweb.springboot:*,org.apache.tomcat.embed:*
Expected:
显示 TongWeb Starter
不再出现 spring-boot-starter-tomcat 的运行时主依赖链
- Step 4: 按 dev 环境启动应用并观察 TongWeb 相关日志
Run:
mvn -pl ruoyi-admin -am spring-boot:run -Dspring-boot.run.profiles=dev
Expected:
应用成功启动
未出现 TongWeb license 加载失败
未出现容器冲突导致的启动中断
- Step 5: 停止启动验证进程并记录结果
执行方式:
- 若前台运行,使用
Ctrl+C停止。 - 若后台运行,记录 PID 后执行
kill <PID>。
要求:
-
确保本次验证产生的进程被关闭,符合仓库“测试结束后自动结束进程”的约束。
-
Step 6: 若出现
server.tomcat.*触发的明确报错,仅修正报错项后重跑 Task 3
处理原则:
-
只处理导致 TongWeb 启动失败的具体项。
-
不做容器参数体系重构。
-
Step 7: 提交这一小步
git add ruoyi-admin/pom.xml
git commit -m "完成TongWeb自启动验证"
Task 4: 补齐后端实施记录
Files:
-
Create:
doc/2026-04-16-TongWeb自启动适配后端实施记录.md -
Reference:
doc/2026-04-16-TongWeb自启动适配后端设计文档.md -
Reference:
doc/2026-04-16-TongWeb自启动适配后端实施计划.md -
Step 1: 编写实施记录,覆盖本次改造结果
记录内容至少包含:
-
改动文件清单
-
TongWeb 依赖替换说明
-
Tongweb_license.dat接入说明 -
配置新增说明
-
测试与启动验证结果
-
若有额外兼容调整,写明触发原因与处理结果
-
Step 2: 自检实施记录与计划、设计文档保持一致
检查点:
-
文件名、配置名均为
Tongweb_license.dat -
只记录后端改造
-
未写入需求之外的扩展方案
-
Step 3: 提交这一小步
git add doc/2026-04-16-TongWeb自启动适配后端实施记录.md
git commit -m "补充TongWeb适配实施记录"
Task 5: 最终回归与交付检查
Files:
-
Reference:
ruoyi-admin/pom.xml -
Reference:
ruoyi-admin/src/main/resources/Tongweb_license.dat -
Reference:
ruoyi-admin/src/main/resources/application-dev.yml -
Reference:
ruoyi-admin/src/main/resources/application-uat.yml -
Reference:
ruoyi-admin/src/main/resources/application-pro.yml -
Reference:
ruoyi-admin/src/test/java/com/ruoyi/TongWebLicenseResourceTest.java -
Reference:
ruoyi-admin/src/test/java/com/ruoyi/TongWebYamlConfigTest.java -
Reference:
doc/2026-04-16-TongWeb自启动适配后端实施记录.md -
Step 1: 运行本次新增测试,确认均通过
Run:
mvn -pl ruoyi-admin -Dtest=TongWebLicenseResourceTest,TongWebYamlConfigTest test
Expected:
BUILD SUCCESS
Tests run: 2, Failures: 0
- Step 2: 再执行一次模块构建,确认最终产物稳定
Run:
mvn -pl ruoyi-admin -am package -DskipTests
Expected:
BUILD SUCCESS
- Step 3: 检查工作区,仅保留本次需求相关变更
Run:
git status --short
Expected:
仅出现本次 TongWeb 适配相关文件变更
忽略 .DS_Store
- Step 4: 整理最终说明,准备向用户回报
回报内容应包含:
- 具体改动范围
- 测试与启动验证结果
- 是否存在需用户额外确认的运行环境前置条件
- 实施记录文档路径