东方通

This commit is contained in:
wkc
2026-04-16 15:43:00 +08:00
parent c37456983f
commit 719f6ad7a2
15 changed files with 1327 additions and 64 deletions

View File

@@ -0,0 +1,16 @@
# ruoyi-admin双产物打包后端实施记录
## 变更时间
- 2026-04-15
## 变更内容
- 调整 `ruoyi-admin/pom.xml`,将 `maven-war-plugin` 显式绑定到 `package` 阶段。
- 保留 `spring-boot-maven-plugin` 生成的可执行 `ruoyi-admin.jar`,用于本地 `java -jar` 启动。
- 新增 WAR 打包产物 `ruoyi-admin.war`,用于服务器上的东方通部署。
- WAR 打包时排除 `WEB-INF/lib/tomcat-embed-*.jar`,避免把嵌入式 Tomcat 依赖带入外部容器部署包。
## 验证结果
- 执行 `mvn -pl ruoyi-admin -am package -DskipTests` 后,`ruoyi-admin/target/` 同时生成 `ruoyi-admin.jar``ruoyi-admin.war`
## 影响范围
- 仅影响 `ruoyi-admin` 模块的 Maven 打包行为,不涉及业务代码逻辑变更。

View File

@@ -0,0 +1,410 @@
# TongWeb接入全流程通用指南
## 1. 适用场景
本文档用于指导 Spring Boot 2.x 项目接入东方通 TongWeb 内嵌容器,适用于以下场景:
- 现有项目默认使用 Spring Boot 内嵌 Tomcat。
- 需要切换为 TongWeb 自启动运行。
- 需要将 TongWeb license 文件随应用一起打包。
- 需要沉淀一套可以迁移到其他项目的标准接入步骤。
本文以本仓库的接入经验为基础,输出的是一套可复用流程,而不是只面向当前项目的零散记录。
## 2. 前置准备
接入前需要准备以下信息:
### 2.1 TongWeb Starter 依赖
当前使用的依赖坐标:
```xml
<dependency>
<groupId>com.tongweb.springboot</groupId>
<artifactId>tongweb-spring-boot-starter-2.x</artifactId>
<version>7.0.E.7</version>
</dependency>
```
### 2.2 Maven 仓库
如果项目默认只配了 Maven Central 或阿里云公共仓库TongWeb 依赖通常无法直接解析,需要补充 TongWeb 仓库:
```xml
<repositories>
<repository>
<id>tongweb-releases</id>
<name>TongWeb Maven Releases</name>
<url>https://mvn.elitescloud.com/nexus/repository/maven-releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
```
### 2.3 License 文件
需要一份可用的 TongWeb license 文件,例如:
- `Tongweb_license.dat`
建议确认以下信息:
- 许可证版本是否与目标 TongWeb 版本一致。
- 许可证是否仍在有效期内。
- 许可证是否允许当前部署规模使用。
## 3. 接入总流程
TongWeb 接入建议按下面顺序执行:
1. 确认项目里是谁引入了默认 Tomcat。
2. 排除默认 Tomcat 依赖。
3. 引入 TongWeb Starter。
4. 把 license 文件放入 `resources`
5.`application.yml` 中增加 TongWeb 配置。
6. 执行构建、依赖树、产物检查和启动验证。
7. 根据日志处理依赖解析、license 不匹配、配置冲突等问题。
## 4. 依赖改造
### 4.1 找出默认 Tomcat 来源
很多项目不是在启动模块直接声明 `spring-boot-starter-web`,而是通过公共框架模块间接引入。因此第一步必须先查清默认 Tomcat 的入口来源。
例如:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
```
如果它出现在公共框架模块里,实际排除 Tomcat 时通常要在应用启动模块对该依赖做 `exclusion`
### 4.2 排除默认 Tomcat
推荐在最终启动模块中对上游框架模块做排除,避免默认内嵌 Tomcat 和 TongWeb 同时进入运行时:
```xml
<dependency>
<groupId>com.xxx</groupId>
<artifactId>project-framework</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
```
### 4.3 引入 TongWeb Starter
在最终启动模块增加 TongWeb Starter
```xml
<dependency>
<groupId>com.tongweb.springboot</groupId>
<artifactId>tongweb-spring-boot-starter-2.x</artifactId>
<version>7.0.E.7</version>
</dependency>
```
### 4.4 资源打包
如果项目资源打包规则比较严格,建议显式保留 `resources` 配置,避免 `.dat` 文件没有进入产物:
```xml
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
</build>
```
## 5. License 文件接入
### 5.1 放置路径
将 TongWeb license 文件放到:
```text
src/main/resources/Tongweb_license.dat
```
建议直接随项目源码管理,便于构建产物统一携带。
### 5.2 命名原则
配置中的文件名必须与实际资源名完全一致。例如资源名是:
```text
Tongweb_license.dat
```
那么配置里也必须写:
```text
classpath:Tongweb_license.dat
```
不要一个地方写 `license.dat`,另一个地方写 `Tongweb_license.dat`,否则运行时会直接出现 license 读取失败。
## 6. 配置接入
建议把 TongWeb 配置统一放到 `application.yml` 中,便于其他项目直接复用,而不是散落到多个环境文件。
推荐配置如下:
```yml
server:
tongweb:
license:
path: classpath:Tongweb_license.dat
```
如果项目本身已经有 `server` 节点,直接挂到其下即可,不需要额外拆配置文件。
## 7. 构建与验证
接入完成后,至少执行下面几类验证。
### 7.1 依赖解析验证
```bash
mvn -pl ruoyi-admin -am package -DskipTests
```
预期:
- TongWeb 依赖能够正常下载。
- 项目可以正常构建。
### 7.2 产物检查
```bash
jar tf ruoyi-admin/target/ruoyi-admin.jar | rg 'Tongweb_license.dat|tongweb'
```
预期:
- `Tongweb_license.dat` 已进入 `BOOT-INF/classes/`
- TongWeb 相关 jar 已进入 `BOOT-INF/lib/`
### 7.3 依赖树检查
```bash
mvn -pl ruoyi-admin dependency:tree '-Dincludes=com.tongweb.springboot:*,com.tongweb:*,org.apache.tomcat.embed:*'
```
预期:
- 能看到 TongWeb Starter 及相关依赖。
- 默认 `spring-boot-starter-tomcat` 不应再作为主依赖链出现。
注意:
- 某些项目中仍可能看到 `tomcat-embed-el`,它可能来自 `spring-boot-starter-validation` 等其他依赖。
- 是否需要继续清理,最终以实际启动结果为准。
### 7.4 启动验证
建议从应用模块目录直接执行:
```bash
mvn -f ruoyi-admin/pom.xml spring-boot:run -Dspring-boot.run.profiles=dev
```
这样可以避免从聚合工程根目录调用时Maven 把插件错误落到父 `pom` 上。
验证重点:
- 应用是否成功启动。
- TongWeb License SDK 日志是否出现。
- 端口是否成功监听。
- 是否出现 TongWeb 与 Tomcat 的容器冲突报错。
### 7.5 启动后进程清理
如果是本地验证,结束测试后需要手动关闭 Java 进程,避免残留服务继续占用端口。
例如:
```bash
lsof -nP -iTCP:63310 -sTCP:LISTEN
kill <PID>
```
## 8. 推荐自动化测试
如果项目有测试体系,建议至少补两类测试。
### 8.1 资源存在性测试
验证 license 文件能否从 classpath 读取:
```java
assertNotNull(
TongWebLicenseResourceTest.class.getClassLoader().getResource("Tongweb_license.dat"));
```
### 8.2 配置存在性测试
验证 `application.yml` 中是否存在:
```text
server.tongweb.license.path
```
这样可以避免后续重构时把 TongWeb 配置误删。
## 9. 常见问题
### 9.1 TongWeb 依赖下载失败
典型现象:
- Maven 提示找不到 `tongweb-spring-boot-starter-2.x`
原因:
- 项目只配置了公共仓库,没有配置 TongWeb 专用仓库。
处理方式:
- 补充 TongWeb Maven 仓库。
### 9.2 `spring-boot:run` 找不到插件
典型现象:
- `No plugin found for prefix 'spring-boot'`
处理方式:
- 改为从子模块目录执行,或者用 `-f ruoyi-admin/pom.xml` 指向具体模块。
### 9.3 `spring-boot:run` 落到父工程
典型现象:
- `Unable to find a suitable main class`
原因:
- Spring Boot 插件被执行在聚合父 `pom` 上。
处理方式:
- 使用:
```bash
mvn -f ruoyi-admin/pom.xml spring-boot:run
```
### 9.4 License 不匹配或已过期
典型现象:
- 版本号不匹配告警
- 有效期已过期
这类问题说明 TongWeb 配置链路通常已经生效,真正的问题是授权文件本身不适配当前环境。
处理方式:
- 更换与目标 TongWeb 版本一致、且仍在有效期内的 license 文件。
### 9.5 项目里仍保留 `server.tomcat.*`
如果项目原先已有:
```yml
server:
tomcat:
...
```
建议先不要大规模重构。
处理策略:
- 若 TongWeb 启动时仅忽略这些配置,则先保留。
- 只有当日志明确指出这些配置导致启动失败时,再做最小必要调整。
## 10. 可复制模板
### 10.1 `pom.xml` 最小改造模板
```xml
<dependency>
<groupId>com.xxx</groupId>
<artifactId>project-framework</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.tongweb.springboot</groupId>
<artifactId>tongweb-spring-boot-starter-2.x</artifactId>
<version>7.0.E.7</version>
</dependency>
```
### 10.2 `application.yml` 模板
```yml
server:
tongweb:
license:
path: classpath:Tongweb_license.dat
```
### 10.3 目录模板
```text
src/main/resources/Tongweb_license.dat
```
## 11. 最终检查清单
在其他项目复用时,可以按下面清单逐项确认:
- 是否已确认默认 Tomcat 的引入来源
- 是否已排除 `spring-boot-starter-tomcat`
- 是否已引入 TongWeb Starter
- 是否已配置 TongWeb Maven 仓库
- 是否已将 `Tongweb_license.dat` 放入 `src/main/resources`
- 是否已在 `application.yml` 中加入 `server.tongweb.license.path`
- 是否已通过构建验证
- 是否已确认产物中包含 TongWeb 相关 jar 与 license 文件
- 是否已完成启动验证
- 是否已确认 license 版本、有效期和授权范围可用
## 12. 结论
TongWeb 接入本质上只包含四件事:
- 替换默认内嵌容器依赖
- 接入 TongWeb 仓库与 Starter
- 让 license 文件进入 classpath
- 用启动日志验证 TongWeb 是否真正接管运行
只要按这个顺序执行TongWeb 接入通常可以用最短路径完成,且这套流程可以直接迁移到其他 Spring Boot 项目中。

View File

@@ -0,0 +1,420 @@
# TongWeb自启动适配后端 Implementation Plan
> **For agentic workers:** REQUIRED: Use `superpowers:executing-plans` to implement this plan. Repository policy in `AGENTS.md` forbids 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.dat`
- `ruoyi-admin/src/test/java/com/ruoyi/TongWebLicenseResourceTest.java`
- `ruoyi-admin/src/test/java/com/ruoyi/TongWebYamlConfigTest.java`
- `doc/2026-04-16-TongWeb自启动适配后端实施记录.md`
**Modify:**
- `ruoyi-admin/pom.xml`
- `ruoyi-admin/src/main/resources/application-dev.yml`
- `ruoyi-admin/src/main/resources/application-uat.yml`
- `ruoyi-admin/src/main/resources/application-pro.yml`
**Reference:**
- `doc/2026-04-16-TongWeb自启动适配后端设计文档.md`
- `doc/Tongweb_license.dat`
- `ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java`
- `ruoyi-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**
```java
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:
```bash
mvn -pl ruoyi-admin -Dtest=TongWebLicenseResourceTest test
```
Expected:
```text
FAIL
resource "Tongweb_license.dat" is null
```
- [ ] **Step 3: 最小实现资源接入与运行时依赖替换**
`ruoyi-admin/pom.xml` 中完成以下最小改造:
-`ruoyi-framework` 依赖增加对 `spring-boot-starter-tomcat` 的排除,避免默认内嵌 Tomcat 继续进入运行时依赖树。
- 新增 TongWeb Starter 依赖:
```xml
<dependency>
<groupId>com.tongweb.springboot</groupId>
<artifactId>tongweb-spring-boot-starter-2.x</artifactId>
<version>7.0.E.7</version>
</dependency>
```
-`build` 中补充资源配置,确保 `.dat` 文件被正常打包:
```xml
<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:
```bash
mvn -pl ruoyi-admin -Dtest=TongWebLicenseResourceTest test
```
Expected:
```text
BUILD SUCCESS
Tests run: 1, Failures: 0
```
- [ ] **Step 5: 提交这一小步**
```bash
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: 编写失败测试,先锁定三套环境配置必须同时存在**
```java
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:
```bash
mvn -pl ruoyi-admin -Dtest=TongWebYamlConfigTest test
```
Expected:
```text
FAIL
expected: classpath:Tongweb_license.dat
but was : null
```
- [ ] **Step 3: 在三套环境配置中追加 TongWeb license 路径**
在以下文件的 `server:` 节点下新增同一段配置:
- `ruoyi-admin/src/main/resources/application-dev.yml`
- `ruoyi-admin/src/main/resources/application-uat.yml`
- `ruoyi-admin/src/main/resources/application-pro.yml`
新增内容:
```yml
tongweb:
license:
path: classpath:Tongweb_license.dat
```
要求:
- 保持现有 YAML 缩进风格。
- 不删除现有 `server.tomcat.*` 配置。
- 不新增任何容器切换开关。
- [ ] **Step 4: 重新运行配置测试确认通过**
Run:
```bash
mvn -pl ruoyi-admin -Dtest=TongWebYamlConfigTest test
```
Expected:
```text
BUILD SUCCESS
Tests run: 1, Failures: 0
```
- [ ] **Step 5: 提交这一小步**
```bash
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:
```bash
mvn -pl ruoyi-admin -am package -DskipTests
```
Expected:
```text
BUILD SUCCESS
```
- [ ] **Step 2: 检查构建产物中确实包含 TongWeb license**
Run:
```bash
jar tf ruoyi-admin/target/ruoyi-admin.jar | rg "Tongweb_license.dat"
```
Expected:
```text
BOOT-INF/classes/Tongweb_license.dat
```
- [ ] **Step 3: 检查运行时依赖树,确认默认 Tomcat 已退出主链路**
Run:
```bash
mvn -pl ruoyi-admin dependency:tree -Dincludes=com.tongweb.springboot:*,org.apache.tomcat.embed:*
```
Expected:
```text
显示 TongWeb Starter
不再出现 spring-boot-starter-tomcat 的运行时主依赖链
```
- [ ] **Step 4: 按 dev 环境启动应用并观察 TongWeb 相关日志**
Run:
```bash
mvn -pl ruoyi-admin -am spring-boot:run -Dspring-boot.run.profiles=dev
```
Expected:
```text
应用成功启动
未出现 TongWeb license 加载失败
未出现容器冲突导致的启动中断
```
- [ ] **Step 5: 停止启动验证进程并记录结果**
执行方式:
- 若前台运行,使用 `Ctrl+C` 停止。
- 若后台运行,记录 PID 后执行 `kill <PID>`
要求:
- 确保本次验证产生的进程被关闭,符合仓库“测试结束后自动结束进程”的约束。
- [ ] **Step 6: 若出现 `server.tomcat.*` 触发的明确报错,仅修正报错项后重跑 Task 3**
处理原则:
- 只处理导致 TongWeb 启动失败的具体项。
- 不做容器参数体系重构。
- [ ] **Step 7: 提交这一小步**
```bash
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: 提交这一小步**
```bash
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:
```bash
mvn -pl ruoyi-admin -Dtest=TongWebLicenseResourceTest,TongWebYamlConfigTest test
```
Expected:
```text
BUILD SUCCESS
Tests run: 2, Failures: 0
```
- [ ] **Step 2: 再执行一次模块构建,确认最终产物稳定**
Run:
```bash
mvn -pl ruoyi-admin -am package -DskipTests
```
Expected:
```text
BUILD SUCCESS
```
- [ ] **Step 3: 检查工作区,仅保留本次需求相关变更**
Run:
```bash
git status --short
```
Expected:
```text
仅出现本次 TongWeb 适配相关文件变更
忽略 .DS_Store
```
- [ ] **Step 4: 整理最终说明,准备向用户回报**
回报内容应包含:
- 具体改动范围
- 测试与启动验证结果
- 是否存在需用户额外确认的运行环境前置条件
- 实施记录文档路径

View File

@@ -0,0 +1,157 @@
# TongWeb自启动适配后端实施记录
## 1. 本次改动概述
本次仅对后端 `ruoyi-admin` 模块进行 TongWeb 自启动适配,保持 Spring Boot `java -jar` 启动方式不变,完成了以下改造:
- 接入 TongWeb Spring Boot Starter 依赖。
- 排除默认内嵌 Tomcat 主依赖链。
-`Tongweb_license.dat` 纳入 `ruoyi-admin` 资源目录并打包进产物。
-`dev``uat``pro` 三套环境配置中增加 `server.tongweb.license.path`
- 补充 TongWeb 资源与配置的自动化测试。
## 2. 修改文件
新增文件:
- `ruoyi-admin/src/main/resources/Tongweb_license.dat`
- `ruoyi-admin/src/test/java/com/ruoyi/TongWebLicenseResourceTest.java`
- `ruoyi-admin/src/test/java/com/ruoyi/TongWebYamlConfigTest.java`
- `doc/2026-04-16-TongWeb自启动适配后端实施记录.md`
修改文件:
- `ruoyi-admin/pom.xml`
- `ruoyi-admin/src/main/resources/application-dev.yml`
- `ruoyi-admin/src/main/resources/application-uat.yml`
- `ruoyi-admin/src/main/resources/application-pro.yml`
## 3. 关键实施内容
### 3.1 依赖与打包调整
`ruoyi-admin/pom.xml` 中完成以下处理:
-`ruoyi-framework` 依赖增加 `spring-boot-starter-tomcat` 排除。
- 新增 `com.tongweb.springboot:tongweb-spring-boot-starter-2.x:7.0.E.7`
- 增加 `resources` 配置,确保 `.dat` 文件进入构建产物。
- 新增 TongWeb Maven 仓库:
- `https://mvn.elitescloud.com/nexus/repository/maven-releases/`
补充仓库的原因是:项目当前默认只使用阿里云公共仓库,无法解析 TongWeb Starter 依赖。
### 3.2 License 资源接入
`doc/Tongweb_license.dat` 复制到:
- `ruoyi-admin/src/main/resources/Tongweb_license.dat`
构建后已确认该文件进入 `ruoyi-admin.jar`
- `BOOT-INF/classes/Tongweb_license.dat`
### 3.3 多环境配置补充
在以下文件的 `server` 节点下增加:
```yml
tongweb:
license:
path: classpath:Tongweb_license.dat
```
涉及文件:
- `ruoyi-admin/src/main/resources/application-dev.yml`
- `ruoyi-admin/src/main/resources/application-uat.yml`
- `ruoyi-admin/src/main/resources/application-pro.yml`
### 3.4 自动化测试补充
新增测试:
- `TongWebLicenseResourceTest`
- 校验 `Tongweb_license.dat` 可从 classpath 读取。
- `TongWebYamlConfigTest`
- 校验 `dev``uat``pro` 三套环境都声明了 `server.tongweb.license.path`
## 4. 验证结果
### 4.1 测试验证
执行命令:
```bash
mvn -pl ruoyi-admin -am -Dtest=TongWebLicenseResourceTest -Dsurefire.failIfNoSpecifiedTests=false test
mvn -pl ruoyi-admin -am -Dtest=TongWebYamlConfigTest -Dsurefire.failIfNoSpecifiedTests=false test
```
结果:
- 两个新增测试均通过。
### 4.2 构建验证
执行命令:
```bash
mvn -pl ruoyi-admin -am package -DskipTests
```
结果:
- 构建成功。
- `ruoyi-admin.jar``ruoyi-admin.war` 均正常产出。
### 4.3 产物检查
执行命令:
```bash
jar tf ruoyi-admin/target/ruoyi-admin.jar | rg 'Tongweb_license.dat|tongweb'
```
结果:
- 确认 `Tongweb_license.dat` 已被打包到 `BOOT-INF/classes/`
- 确认 TongWeb 相关依赖已进入最终产物。
### 4.4 依赖树检查
执行命令:
```bash
mvn -pl ruoyi-admin dependency:tree '-Dincludes=com.tongweb.springboot:*,com.tongweb:*,org.apache.tomcat.embed:*'
```
结果:
- 已出现 TongWeb Starter 及其相关依赖。
- 默认 `spring-boot-starter-tomcat` 主依赖链已不在结果中。
- 依赖树中仍存在 `org.apache.tomcat.embed:tomcat-embed-el:9.0.112`,来源为 `spring-boot-starter-validation`,本次未额外清理。
### 4.5 启动验证
执行命令:
```bash
mvn -f ruoyi-admin/pom.xml spring-boot:run -Dspring-boot.run.profiles=dev
```
结果:
- 应用成功监听 `63310` 端口。
- TongWeb License SDK 日志已输出,说明 `server.tongweb.license.path` 配置生效,许可证文件已被读取。
- 启动验证完成后,已手动结束后台 Java 进程,未残留测试进程。
## 5. 风险与遗留事项
启动日志中发现当前 `Tongweb_license.dat` 本身存在以下问题:
- 许可证版本信息为 `7.0`,而当前中间件产品版本为 `7.0.E`,存在版本不匹配告警。
- 许可证有效期显示为 `2023-02-23`,已过期。
结论:
- 本次代码改造已经打通 TongWeb 接入、资源加载、配置读取和启动链路。
- 但上线前应替换为与 `TongWeb 7.0.E` 匹配且在有效期内的正式授权文件,否则运行环境存在授权风险。

View File

@@ -0,0 +1,193 @@
# TongWeb 自启动适配后端设计文档
## 1. 背景
当前项目为 RuoYi-Vue 前后端分离架构,后端启动入口位于 `ruoyi-admin` 模块,现状采用 Spring Boot 自启动方式运行。根据 `doc/tongweb.docx` 的要求,本次需要将后端运行容器从默认 Tomcat 调整为 TongWeb并接入 TongWeb license 文件。
本次改造范围已经确认如下:
- 只改后端,不涉及前端。
- 保持 Spring Boot 自启动模式,不改为外部 TongWeb 容器部署。
- 资源目录中直接使用 `Tongweb_license.dat` 文件名,不改名。
- TongWeb Starter 依赖坐标为 `com.tongweb.springboot:tongweb-spring-boot-starter-2.x:7.0.E.7`
## 2. 目标
本次改造需要达成以下结果:
- 后端仍可通过 `java -jar` 方式启动。
- 运行时内嵌 Web 容器由默认 Tomcat 切换为 TongWeb。
- TongWeb license 文件随应用构建产物一起打包并可通过 classpath 访问。
- 新增 TongWeb license 配置后,现有业务模块与接口链路保持不变。
## 3. 设计原则
- 采用最短路径实现,只修改 TongWeb 适配所必需的内容。
- 改动集中在 `ruoyi-admin` 模块,避免无关模块受到影响。
- 不增加兼容性开关、双容器切换方案或补丁式旁路逻辑。
- 先完成容器替换与 license 接入,再通过启动验证确认链路闭环。
## 4. 方案对比
### 方案 A仅在 `ruoyi-admin` 替换为 TongWeb 自启动
做法:
-`ruoyi-admin/pom.xml` 中排除 Spring Boot 默认 Tomcat。
- 引入 TongWeb Starter 依赖。
-`Tongweb_license.dat` 放入 `ruoyi-admin/src/main/resources`
- 在环境配置中新增 `server.tongweb.license.path`
优点:
- 改动范围最小,完全贴合当前需求。
- 不改变现有 `main` 方法启动链路。
- 对业务模块零侵入。
缺点:
- 需要验证现有 `server.tomcat.*` 配置在 TongWeb 下是否存在无效项。
### 方案 B在父 `pom` 统一管理 TongWeb 版本,再由 `ruoyi-admin` 接入
做法:
- 在根 `pom.xml` 中增加 TongWeb 版本管理。
-`ruoyi-admin` 声明依赖与资源处理。
优点:
- 依赖管理更集中。
缺点:
- 当前只有 `ruoyi-admin` 使用 TongWeb额外抽象收益较低。
- 相比本次需求略显偏重。
### 方案 C同时保留 Tomcat 与 TongWeb 切换能力
做法:
- 通过 Maven Profile 或可选依赖实现容器切换。
优点:
- 运行方式更灵活。
缺点:
- 明显超出当前需求。
- 会增加打包、启动、部署链路复杂度。
### 结论
采用方案 A。该方案满足当前需求且实现路径最短符合本次改造边界。
## 5. 详细设计
### 5.1 模块范围
仅修改 `ruoyi-admin` 模块,保留现有业务模块、启动入口和打包主流程。
### 5.2 依赖调整
`ruoyi-admin/pom.xml` 中执行以下改造:
- 引入 `com.tongweb.springboot:tongweb-spring-boot-starter-2.x:7.0.E.7`
- 排除 Spring Boot 默认内嵌 Tomcat 依赖,避免运行时容器冲突。
- 补充资源打包配置,确保 `.dat` 许可证文件进入构建产物。
依赖管理不下沉到父 `pom`,保持改造聚焦在当前实际使用模块。
### 5.3 资源文件接入
将仓库中的 `doc/Tongweb_license.dat` 复制到:
- `ruoyi-admin/src/main/resources/Tongweb_license.dat`
资源文件名保持为 `Tongweb_license.dat`,与用户确认结果一致,不额外重命名为 `license.dat`
### 5.4 配置设计
由于项目当前按环境拆分配置文件,因此在以下文件中统一补充 TongWeb license 配置:
- `ruoyi-admin/src/main/resources/application-dev.yml`
- `ruoyi-admin/src/main/resources/application-uat.yml`
- `ruoyi-admin/src/main/resources/application-pro.yml`
新增配置位于 `server` 节点下,形式为:
```yml
server:
tongweb:
license:
path: classpath:Tongweb_license.dat
```
这样可以确保 dev、uat、pro 三套环境在 TongWeb 自启动时行为一致。
### 5.5 Tomcat 配置处理策略
当前环境配置中存在 `server.tomcat.*` 参数。针对这些参数,本次采用以下策略:
- 不主动做大规模迁移或参数重写。
- 若 TongWeb Starter 启动时仅忽略这些配置,则保持不动。
- 若个别参数导致启动失败,再针对报错项做最小必要调整。
该策略的目的,是避免在本次需求中扩展出容器参数全面改造。
## 6. 数据流与运行链路
改造后的启动链路如下:
1. 应用仍从 `RuoYiApplication.main` 进入。
2. Spring Boot 自动装配 TongWeb Starter。
3. TongWeb 从 classpath 读取 `Tongweb_license.dat`
4. 应用在 TongWeb 内嵌容器中完成启动。
5. 现有业务接口继续由 Spring MVC 与现有业务模块处理。
本次不改变业务接口、数据库访问、鉴权、缓存和前端交互逻辑。
## 7. 错误处理与风险边界
本次重点关注以下风险:
- TongWeb 依赖无法从当前 Maven 仓库解析。
- `Tongweb_license.dat` 未被正确打包进产物。
- `server.tongweb.license.path` 与实际资源名不一致导致 license 加载失败。
- 现有 `server.tomcat.*` 中存在与 TongWeb 冲突的配置项。
对应处理原则如下:
- 先保证依赖可解析、资源可入包、配置可读取。
- 仅在出现明确启动错误时处理 TongWeb 与 Tomcat 参数冲突。
- 不扩展到业务逻辑调整、容器双模切换或外部部署方案。
## 8. 验证方案
验证范围限定为 TongWeb 适配闭环,不扩展无关测试:
1. 执行 Maven 构建,确认依赖解析正常、项目可打包。
2. 检查 `ruoyi-admin` 最终构建产物,确认包含 `Tongweb_license.dat`
3. 按现有 Spring Boot 自启动方式启动应用。
4. 确认应用能完成启动,且未因 TongWeb license 配置报错中断。
若启动时报出 TongWeb 对 `server.tomcat.*` 配置不兼容,再做针对性修正并重新验证。
## 9. 非目标
以下内容不在本次改造范围内:
- 前端页面或前端构建链路调整。
- 外部 TongWeb 服务器 WAR 部署方案。
- Tomcat 与 TongWeb 双容器切换能力。
- 容器参数体系重构。
- 业务接口、数据库结构、权限逻辑变更。
## 10. 文档产出
本次仅涉及后端,因此实施阶段只需要补充一份后端实施记录,保存在 `doc/` 目录下。
## 11. 审阅说明
根据仓库协作约束,本次不启用 subagent。设计文档将采用手工自检方式完成审阅待用户确认后再进入实施计划阶段。

BIN
doc/tongweb.docx Executable file

Binary file not shown.

BIN
doc/~$ongweb.docx Normal file

Binary file not shown.

78
pom.xml
View File

@@ -34,9 +34,9 @@
<tomcat.version>9.0.112</tomcat.version> <tomcat.version>9.0.112</tomcat.version>
<logback.version>1.2.13</logback.version> <logback.version>1.2.13</logback.version>
<spring-security.version>5.7.14</spring-security.version> <spring-security.version>5.7.14</spring-security.version>
<spring-framework.version>5.3.39</spring-framework.version> <spring-framework.version>5.3.39</spring-framework.version>
<mybatis-plus.version>3.5.1</mybatis-plus.version> <mybatis-plus.version>3.5.1</mybatis-plus.version>
</properties> </properties>
<!-- 依赖声明 --> <!-- 依赖声明 -->
<dependencyManagement> <dependencyManagement>
@@ -115,18 +115,18 @@
<version>${yauaa.version}</version> <version>${yauaa.version}</version>
</dependency> </dependency>
<!-- pagehelper 分页插件 --> <!-- pagehelper 分页插件 -->
<dependency> <dependency>
<groupId>com.github.pagehelper</groupId> <groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId> <artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.boot.version}</version> <version>${pagehelper.boot.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.baomidou</groupId> <groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId> <artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version> <version>${mybatis-plus.version}</version>
</dependency> </dependency>
<!-- 获取系统信息 --> <!-- 获取系统信息 -->
<dependency> <dependency>
@@ -211,24 +211,24 @@
<version>${ruoyi.version}</version> <version>${ruoyi.version}</version>
</dependency> </dependency>
<!-- 系统模块--> <!-- 系统模块-->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-system</artifactId> <artifactId>ruoyi-system</artifactId>
<version>${ruoyi.version}</version> <version>${ruoyi.version}</version>
</dependency> </dependency>
<!-- 利率定价模块--> <!-- 利率定价模块-->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-loan-pricing</artifactId> <artifactId>ruoyi-loan-pricing</artifactId>
<version>${ruoyi.version}</version> <version>${ruoyi.version}</version>
</dependency> </dependency>
<!-- 通用工具--> <!-- 通用工具-->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId> <artifactId>ruoyi-common</artifactId>
<version>${ruoyi.version}</version> <version>${ruoyi.version}</version>
</dependency> </dependency>
@@ -239,11 +239,11 @@
<module>ruoyi-admin</module> <module>ruoyi-admin</module>
<module>ruoyi-framework</module> <module>ruoyi-framework</module>
<module>ruoyi-system</module> <module>ruoyi-system</module>
<module>ruoyi-quartz</module> <module>ruoyi-quartz</module>
<module>ruoyi-generator</module> <module>ruoyi-generator</module>
<module>ruoyi-common</module> <module>ruoyi-common</module>
<module>ruoyi-loan-pricing</module> <module>ruoyi-loan-pricing</module>
</modules> </modules>
<packaging>pom</packaging> <packaging>pom</packaging>
<build> <build>
@@ -286,4 +286,4 @@
</pluginRepository> </pluginRepository>
</pluginRepositories> </pluginRepositories>
</project> </project>

View File

@@ -43,11 +43,17 @@
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
</dependency> </dependency>
<!-- 核心模块--> <!-- 核心模块-->
<dependency> <dependency>
<groupId>com.ruoyi</groupId> <groupId>com.ruoyi</groupId>
<artifactId>ruoyi-framework</artifactId> <artifactId>ruoyi-framework</artifactId>
</dependency> <exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 定时任务--> <!-- 定时任务-->
<dependency> <dependency>
@@ -67,6 +73,12 @@
<artifactId>ruoyi-loan-pricing</artifactId> <artifactId>ruoyi-loan-pricing</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.tongweb.springboot</groupId>
<artifactId>tongweb-spring-boot-starter-2.x</artifactId>
<version>7.0.E.7</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
@@ -74,11 +86,20 @@
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <resources>
<plugin> <resource>
<groupId>org.springframework.boot</groupId> <directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<version>2.5.15</version> <version>2.5.15</version>
<configuration> <configuration>
@@ -92,17 +113,40 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId> <artifactId>maven-war-plugin</artifactId>
<version>3.1.0</version> <version>3.1.0</version>
<configuration> <configuration>
<failOnMissingWebXml>false</failOnMissingWebXml> <failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${project.artifactId}</warName> <packagingExcludes>WEB-INF/lib/tomcat-embed-*.jar</packagingExcludes>
</configuration> </configuration>
</plugin> <executions>
</plugins> <execution>
<finalName>${project.artifactId}</finalName> <id>package-war</id>
</build> <phase>package</phase>
<goals>
<goal>war</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
<repositories>
<repository>
<id>tongweb-releases</id>
<name>TongWeb Maven Releases</name>
<url>https://mvn.elitescloud.com/nexus/repository/maven-releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project> </project>

View File

@@ -5,6 +5,9 @@ server:
servlet: servlet:
# 应用的访问路径 # 应用的访问路径
context-path: / context-path: /
tongweb:
license:
path: classpath:license.dat
tomcat: tomcat:
# tomcat的URI编码 # tomcat的URI编码
uri-encoding: UTF-8 uri-encoding: UTF-8

View File

@@ -5,6 +5,9 @@ server:
servlet: servlet:
# 应用的访问路径 # 应用的访问路径
context-path: / context-path: /
tongweb:
license:
path: classpath:Tongweb_license.dat
tomcat: tomcat:
# tomcat的URI编码 # tomcat的URI编码
uri-encoding: UTF-8 uri-encoding: UTF-8
@@ -81,4 +84,3 @@ spring:
model: model:
url: http://64.202.32.40:8083/api/service/interface/invokeService/syllcs url: http://64.202.32.40:8083/api/service/interface/invokeService/syllcs

View File

@@ -5,6 +5,9 @@ server:
servlet: servlet:
# 应用的访问路径 # 应用的访问路径
context-path: / context-path: /
tongweb:
license:
path: classpath:Tongweb_license.dat
tomcat: tomcat:
# tomcat的URI编码 # tomcat的URI编码
uri-encoding: UTF-8 uri-encoding: UTF-8
@@ -81,4 +84,3 @@ spring:
model: model:
url: http://localhost:63310/rate/pricing/mock/invokeModel url: http://localhost:63310/rate/pricing/mock/invokeModel

View File

@@ -0,0 +1 @@
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

15
tongweb_63310.properties Normal file
View File

@@ -0,0 +1,15 @@
#TongTech License properties
#Thu Apr 16 15:25:43 CST 2026
license.end.date=-1
license.extern.properties.name=validateType,order_number,license_info
license.file.path=classpath\:license.dat
license.create.date=2024-12-10
license.max.number=-1
server.number=7.0.E.7
license.customer.name=\u6D59\u6C5F\u519C\u6751\u5546\u4E1A\u8054\u5408\u94F6\u884C\u80A1\u4EFD\u6709\u9650\u516C\u53F8
license.extern.properties.value=file,2024-2121,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
license.project.name=\u6D59\u6C5F\u519C\u6751\u5546\u4E1A\u8054\u5408\u94F6\u884C\u80A1\u4EFD\u6709\u9650\u516C\u53F8\u5173\u4E8E\u56FD\u4EA7\u5316\u5E94\u7528\u670D\u52A1\u5668\u4E2D\u95F4\u4EF6\u91C7\u8D2D
license.type=release
application.location=/Users/wkc/Desktop/loan-pricing/loan-pricing-jdk-1.8
license.validate.type=file
license.file.content=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