DigitalHainan Spring 微服务框架脚手架与集成指南,覆盖 POM、缓存、MyBatis、认证、OSS 等核心模块。

本文档用于指导在目标项目中完成
digitalhainan-tongweb模块集成。执行顺序:
- 先完成「12.1.2 快速集成」的全部步骤(必须)
- 根据业务需求,查阅「功能集成决策索引」选择对应路径,逐项实现
- 遇到配置问题时参考「12.1.3 配置属性参考」
- 出现异常时查阅「12.1.6 常见问题」
代码约定: 本模块为纯配置模块,无 Java 源码。所有配置示例使用 YAML 格式。
digitalhainan-tongweb-spring-boot-starter 是数字海南框架提供的信创 Web 容器替代方案,用于将 Spring Boot 项目默认的 Tomcat 容器替换为东方通 TongWeb V8.0 嵌入式版,满足国产化/信创合规要求。
Maven 坐标:
<dependency>
<groupId>cn.com.digitalhainan</groupId>
<artifactId>digitalhainan-tongweb-spring-boot-starter</artifactId>
</dependency>前置依赖(项目 pom.xml 中必须已有):
| 依赖 | 说明 |
|---|---|
digitalhainan-pom | 父 POM,定义 xc-tongweb Profile 和 TongWeb 版本管理 |
| TongWeb 嵌入式 License | 需联系东方通相关人员获取 license.dat 授权文件 |
当前版本: 2.0.0-SNAPSHOT
技术规格:
| 项目 | 版本/规格 |
|---|---|
| TongWeb 嵌入式版 | 8.0.E.9 |
| Spring Boot | 2.x(对应 tongweb-spring-boot-starter-2.x) |
| JDK | JDK 8+ |
目标: 完成以下 7 个步骤后,项目即运行在 TongWeb 容器上。
操作: 业务项目需继承 digitalhainan-pom,其中定义了 xc-tongweb Profile 和 TongWeb 版本管理:
<parent>
<groupId>cn.com.digitalhainan</groupId>
<artifactId>digitalhainan-pom</artifactId>
<version>2.0.0-SNAPSHOT</version>
</parent>操作: 通过以下方式之一激活 xc-tongweb Profile,自动完成 Tomcat 排除 + TongWeb 引入。
方式一:IDE 中手动勾选(推荐日常开发)
以 IntelliJ IDEA 为例:
Profilesxc-tongweb勾选后 IDE 会重新导入 Maven 依赖,Tomcat 会被排除、TongWeb 会被引入,此时可直接运行启动类进行开发调试。
方式二:命令行指定
mvn clean package -P xc-tongwebProfile 工作原理(仅供参考,无需在业务项目中重复配置):
xc-tongwebProfile 定义在digitalhainan-pom/pom.xml中,激活后自动执行:
- 排除 Tomcat:从
spring-boot-starter-web中排除spring-boot-starter-tomcat- 引入 TongWeb:自动引入
digitalhainan-tongweb-spring-boot-starter
操作: TongWeb 嵌入式版启动时需依赖授权文件校验,请联系东方通相关人员获取 license.dat 授权文件。
将 license.dat 文件放置到 src/main/resources/ 目录下,在 application.yml 中配置:
server:
tongweb:
license:
# 指定认证方式为本地认证
type: file
# 指定 license.dat 文件路径(classpath 方式)
path: classpath:license.dat也支持使用本地磁盘绝对路径(适用于生产环境外部挂载):
path: /opt/license/license.dat如需远程认证,参考「12.1.3 配置属性参考 - 3.1 License 配置」中的 remote 模式。
操作: 启动项目,检查以下条件:
IDE 直接运行:找到项目中带有 @SpringBootApplication 注解的启动类,右键 → Run 即可。
Maven 命令启动:
mvn spring-boot:run -P xc-tongweb| 检查项 | 预期结果 |
|---|---|
| 控制台 Banner | 显示 TongWeb 专属 Banner(非 Tomcat) |
| License 日志 | 出现 授权证书已经成功通过校验 |
| 容器初始化日志 | 出现 TongWeb initialized with port(s): 9080 (http) |
| Servlet 引擎日志 | 出现 Starting Servlet engine: [TongWeb/8.0.E.9] |
| 应用启动 | 出现 Started Application in x.xxx seconds |
TongWeb 专属 Banner:
_____ __ __ _
|_ _|__ _ __ __ \ \ / /__| |__
| |/ _ \| '_ \ / _` \ \ /\ / / _ \ '_ \
| | (_) | | | | (_| |\ V V / __/ |_) |
|_|\___/|_| |_|\__, | \_/\_/ \___|_.__/
|___/
Copyright 2026 Beijing TongTech All rights reserved.如果启动失败,参考「12.1.6 常见问题 Q1」排查 License 问题。
操作: 确认 Tomcat 已被排除、TongWeb 已引入:
# 确认无 Tomcat 依赖(预期无输出)
mvn dependency:tree -P xc-tongweb | findstr tomcat
# 确认 TongWeb 依赖已引入
mvn dependency:tree -P xc-tongweb | findstr tongweb# 构建(激活 TongWeb Profile)
mvn clean package -P xc-tongweb
# 启动
java -jar target/your-app.jar注意:
-P xc-tongweb仅在打包时生效。IDE 中直接 Run 启动类时,需通过 Step 2 的方式手动激活 Profile。
TongWeb 集成采用零侵入设计,回退到 Tomcat 无需修改任何代码:
# 回退到 Tomcat(不激活 TongWeb Profile)
mvn clean package
# 启动(使用默认 Tomcat 容器)
java -jar target/your-app.jar回退后行为与集成前完全一致,100% 向后兼容。
server.tongweb.license.* | 参数 | 默认值 | 说明 | 示例值 |
|---|---|---|---|
type | — | License 认证模式。file:本地文件认证;remote:远程 License Server 认证 | file |
path | — | 本地认证时 license.dat 文件路径,支持 classpath: 前缀或绝对路径 | classpath:license.dat |
license-ips | — | 远程认证时 License Server 地址,格式 IP:端口 | 127.0.0.1:8888 |
license-public-key | — | 远程认证时 License-SDK 请求加密公钥(从 License Server 管理控制台获取) | your-public-key |
ssl-enabled | false | 远程认证是否启用 SSL 加密通信 | true |
ssl.key-store | — | SSL 加密密钥库路径 | classpath:client.p12 |
ssl.key-store-password | — | 加密密钥库密码 | 123456 |
ssl.key-store-type | — | 加密密钥库格式(PKCS12/JKS) | PKCS12 |
ssl.trust-store | — | SSL 签名信任库路径 | classpath:server.jks |
ssl.trust-store-password | — | 签名信任库密码 | 123456 |
ssl.trust-store-type | — | 签名信任库格式(JKS/PKCS12) | JKS |
license.dat 放置位置说明:
| 放置位置 | 配置方式 | 说明 |
|---|---|---|
src/main/resources/ | classpath:license.dat | 推荐,打包后自动包含在 jar 中 |
| 本地磁盘 | 绝对路径,如 /opt/license/license.dat | 需确保运行环境存在该文件 |
License 文件字段说明:
| 字段 | 说明 |
|---|---|
| 产品名称 | 授权的产品标识(如 TongWeb) |
| 版本号 | 授权适用的产品版本 |
| 授权类型 | 试用版 / 正式版 |
| 到期日期 | 授权有效期截止时间 |
| MAC 地址 / IP 绑定 | 绑定的服务器硬件标识(部分授权类型) |
| 最大连接数 | 授权的最大并发连接数限制 |
更新 License:
license.dat 文件,重启应用即可生效server.tongweb.* | 参数 | 默认值 | 说明 | 示例值 |
|---|---|---|---|
server-name | tongweb | 服务器名称,用于 Banner 日志和运行状态标识 | myapp |
use-http | true | 是否开启 HTTP 明文监听,设为 false 则不启动 HTTP 端口 | true |
http-port | 9080 | HTTP Connector 监听端口(注意与 Tomcat 8080 不同) | 8080 |
http2-enabled | false | 是否启用 HTTP/2 协议(需配合 HTTPS 使用) | true |
max-http-post-size | 2097152 | HTTP POST 请求体最大字节数(默认 2MB),文件上传场景需调大,-1 为不限制 | 5242880 |
http-header-size | 8192 | HTTP 请求头最大字节数(默认 8KB),大 Token 场景需调大 | 16384 |
max-parameter-count | 10000 | 单个请求最大参数数量(Query + POST 表单) | 5000 |
max-swallow-size | 2097152 | 请求体未被完全读取时最大吞咽字节数,-1 为不限制 | -1 |
max-save-post-size | 0 | FORM/CGI 场景缓存 POST 请求体到内存的最大字节数,0 为不缓存 | 4096 |
uri-encoding | UTF-8 | URI 路径参数字符编码。可选值:UTF-8/ISO-8859-1/GBK | UTF-8 |
server.tongweb.* | 参数 | 默认值 | 说明 | 示例值 |
|---|---|---|---|
use-https | false | 是否开启 HTTPS 加密监听 | true |
https-port | 9443 | HTTPS Connector 监听端口 | 8443 |
keystore-path | — | SSL 密钥库文件路径,支持 classpath: 或绝对路径。启用 HTTPS 时必须配置 | classpath:keystore.p12 |
keystore-password | — | 密钥库访问密码。启用 HTTPS 时必须配置 | changeit |
key-password | — | 密钥库中私钥条目密码(通常与 keystore-password 相同) | changeit |
keystore-type | — | 密钥库格式。JKS(Java 原生)/ PKCS12(国际通用,推荐) | PKCS12 |
truststore-path | — | 信任库文件路径,双向 SSL(mTLS)场景必须配置 | /opt/certs/trust.jks |
truststore-password | — | 信任库访问密码。双向 SSL 场景必须配置 | changeit |
truststore-type | — | 信任库格式。JKS / PKCS12 | JKS |
client-auth | none | 客户端证书认证模式。none(不要求)/ want(可选)/ need(强制) | need |
ciphers | — | 允许的 SSL/TLS 加密套件列表(逗号分隔),可限制为国密套件满足等保/密评合规 | TLS_AES_256_GCM_SHA384 |
server.tongweb.* | 参数 | 默认值 | 说明 | 示例值 |
|---|---|---|---|
use-manifest-jar-file | true | 是否使用 Manifest Jar 方式加载类。Spring Boot Fat Jar 部署时必须为 true | true |
session-timeout | 30 | HTTP Session 超时时间(分钟) | 60 |
server-initialize-on-startup | false | 是否启动时立即初始化 Servlet 容器。设为 true 可提前发现配置错误 | true |
server.tongweb.license-remote.* | 参数 | 默认值 | 说明 | 示例值 |
|---|---|---|---|
type | remote | 远程 License 认证模式类型。file / remote | remote |
address | — | License Server 地址,格式 IP:端口 | 192.168.1.100:8631 |
product-name | — | 在 License Server 上注册的产品名称标识 | myapp |
server:
tongweb:
# License 配置(本地认证)
license:
type: file
path: classpath:license.dat
# HTTP 配置
server-name: myapp
use-http: true
http-port: 9080
# HTTPS 配置(生产环境建议启用)
use-https: true
https-port: 8443
keystore-path: classpath:keystore.p12
keystore-password: your-password
keystore-type: PKCS12
# 容器行为
use-manifest-jar-file: true
session-timeout: 30
uri-encoding: UTF-8远程认证模式完整示例:
server:
tongweb:
license:
type: remote
license-ips: 127.0.0.1:8888
license-public-key: your-public-key
ssl-enabled: true
ssl:
key-store: classpath:client.p12
key-store-password: 123456
key-store-type: PKCS12
trust-store: classpath:server.jks
trust-store-password: 123456
trust-store-type: JKSAI 执行指引: 先完成「12.1.2 快速集成」,然后根据业务需求在下表中找到对应路径,跳转到对应小节实现。
| 业务需求 | 集成路径 | 前置条件 |
|---|---|---|
| 基础容器替换(Tomcat → TongWeb) | 12.1.2 快速集成 | 完成 Step 1-7 |
| 配置远程 License 认证 | 4.1 | 完成第二章 |
| 启用 HTTPS/SSL 加密 | 4.2 | 完成第二章 + 准备 SSL 证书 |
| 启用运行时监控(Actuator + Grafana) | 4.3 | 完成第二章 |
| 启用 WebSocket 支持 | 4.4 | 完成第二章 |
| 搭建 License Server(多实例场景) | 4.5 | 完成第二章 |
适用场景: 多实例集中管理 License 授权,避免每个实例单独放置 license.dat 文件。 前置条件: 已从 License Server 管理控制台获取加密公钥。
Step 1: 修改配置
server:
tongweb:
license:
type: remote
license-ips: 127.0.0.1:8888
license-public-key: your-public-keyStep 2:(可选)启用 SSL 加密通信
server:
tongweb:
license:
ssl-enabled: true
ssl:
key-store: classpath:client.p12
key-store-password: 123456
key-store-type: PKCS12
trust-store: classpath:server.jks
trust-store-password: 123456
trust-store-type: JKS验证: 启动日志中出现 授权证书已经成功通过校验。
适用场景: 生产环境需要加密传输,或需要满足等保/密评合规要求。 前置条件: 已准备 SSL 证书文件(PKCS12 或 JKS 格式)。
Step 1: 启用 HTTPS(单向 SSL)
server:
tongweb:
use-https: true
https-port: 8443
keystore-path: classpath:keystore.p12
keystore-password: your-password
keystore-type: PKCS12Step 2:(可选)启用双向 SSL(mTLS)
server:
tongweb:
truststore-path: /opt/certs/trust.jks
truststore-password: changeit
truststore-type: JKS
client-auth: needStep 3:(可选)限制国密加密套件
server:
tongweb:
ciphers: TLS_AES_256_GCM_SHA384验证: 通过 https://localhost:8443 访问应用,浏览器显示安全连接。
适用场景: 需要实时监控 TongWeb 容器运行状态(连接池、请求处理、Session 等)。 前置条件: 项目已引入 Spring Boot Actuator。
Step 1: 引入监控依赖
在业务项目 pom.xml 中添加:
<dependency>
<groupId>com.tongweb.springboot</groupId>
<artifactId>tongweb-spring-boot-monitor-starter-2.x</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>Step 2: 获取监控指标
启用后可通过 Actuator 端点获取以下指标:
Step 3:(可选)导入 Grafana 监控模板
TongWeb 提供配套 Grafana 监控模板(位于安装包根目录):
嵌入式_配置指标-xxxx.json:K8s 环境 Grafana 监控模板嵌入式_配置指标单机版.json:单机版 Grafana 监控模板验证: 访问 /actuator 端点确认 TongWeb 监控指标已注册。
适用场景: 需要在 TongWeb 容器上使用 Spring Boot WebSocket(
@ServerEndpoint注解)。 前置条件: 完成第二章快速集成。
Step 1: 引入 WebSocket 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>com.tongweb.springboot</groupId>
<artifactId>tongweb-spring-boot-websocket-2.x</artifactId>
</dependency>Step 2: 使用 @ServerEndpoint 注解
引入依赖后,Spring Boot 的 @ServerEndpoint 注解可正常使用,无需额外配置。
验证: 创建 WebSocket 端点并通过客户端连接测试。
适用场景: 多实例集中管理 License 授权。
操作步骤:
license.dat 授权文件license-public-key)application.yml 中配置远程认证信息(参见 4.1 节)排查步骤:
license.dat 文件存在且路径配置正确classpath: 路径,确认文件已打包进 jar(检查 target/ 目录下的 jar 包内容)server.tongweb.license.type 和 server.tongweb.license.path 配置无误常见错误:
server:
tongweb:
license:
# 错误:路径未加 classpath: 前缀,但文件在 resources 目录
path: license.dat
# 正确写法
# path: classpath:license.dat排查步骤:
mvn dependency:tree -P xc-tongweb > dep-tree.txtfindstr tomcat dep-tree.txt预期无输出,如有残留请检查 Profile 是否正确激活。
排查步骤:
keystore-type 与证书文件格式匹配(PKCS12 对应 .p12/.pfx,JKS 对应 .jks)server:
tongweb:
use-https: true
https-port: 8443
keystore-path: classpath:keystore.p12
keystore-password: your-password
keystore-type: PKCS12原因分析: 未引入 tongweb-spring-boot-websocket-2.x 依赖。
解决方案: 在 pom.xml 中添加 WebSocket Starter 依赖(参见「12.1.4 核心功能使用 - 4.4 WebSocket 支持」)。
原因分析: TongWeb 默认 HTTP 端口为 9080,Tomcat 默认为 8080。切换容器后需调整前端代理或测试脚本中的端口配置。
解决方案: 修改 server.tongweb.http-port 为 8080,或调整调用方端口。
| digitalhainan-tongweb | Spring Boot | TongWeb | JDK | 备注 |
|---|---|---|---|---|
| 2.0.0-SNAPSHOT | 2.x | 8.0.E.9 嵌入式 | 8/11/17 | 当前版本;零侵入 Profile 切换 |
注意事项:
开发阶段:
xc-tongwebProfile 仅在 Maven 打包时生效。IDE 中直接 Run 启动类时,需手动在 Maven 面板勾选该 Profile,否则仍使用 Tomcat- TongWeb 默认 HTTP 端口为
9080,Tomcat 默认为8080。切换容器后注意调整前端代理或测试脚本中的端口配置- 确保项目中不存在多个 Servlet 容器实现(如同时引入 Tomcat 和 TongWeb)。使用
mvn dependency:tree检查上线后:
- 生产环境建议使用磁盘绝对路径(如
/opt/license/license.dat)而非 classpath 方式,便于独立更新 License 无需重新部署 jar 包- TongWeb 运行日志输出到
logs/tongweb/目录,需关注磁盘空间,建议配置日志轮转策略- 生产环境建议启用 HTTPS(
use-https: true),证书文件路径和密码应通过环境变量或配置中心管理,避免硬编码- 建议启用 monitor-starter 并对接 Grafana,实时监控 TongWeb 连接池、请求处理等关键指标