SpringBoot项目从Tomcat迁移到东方通TongWeb7的完整实战手册(含达梦数据库适配)
在国产化技术栈替代浪潮中,中间件迁移是每个Java开发者必须掌握的技能。最近带队完成了基于若依框架的SpringBoot系统从Tomcat到TongWeb7的完整迁移,过程中踩过的坑、解决的难题,今天用最接地气的方式分享给大家。这份指南不仅适用于若依框架,任何SpringBoot项目的中间件国产化改造都能从中获得启发。
1. 环境准备与依赖调整
1.1 移除Tomcat依赖
首先打开项目的pom.xml文件,关键修改点有两个:
<!-- 移除内嵌Tomcat --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- 修改打包方式 --> <packaging>war</packaging>特别注意:与网上大部分教程不同,TongWeb7不需要额外添加适配依赖。实际测试发现,直接排除Tomcat后打包的WAR包在TongWeb7上运行更稳定。
1.2 配置文件改造
迁移后配置文件需要特别注意以下参数:
| 配置项 | Tomcat环境值 | TongWeb适配值 | 说明 |
|---|---|---|---|
| server.port | 8080 | 无效 | TongWeb通过通道端口控制 |
| server.servlet.context-path | /api | / | 建议根路径,通过虚拟主机配置路由 |
| spring.servlet.multipart.location | /tmp | /data/upload | 需要预先创建目录并赋权 |
# 示例配置片段 spring: datasource: driver-class-name: dm.jdbc.driver.DmDriver url: jdbc:dm://192.168.1.100:5236/DB_NAME redis: host: 127.0.0.1 password: redis@123实际踩坑记录:达梦数据库连接串中的端口号5236是默认端口,如果修改过达梦配置,这里必须对应修改。
2. 前后端打包实战
2.1 后端WAR包制作
标准的Maven打包流程:
mvn clean package -DskipTests但有几个隐藏坑点需要特别注意:
- 检查
WEB-INF/lib目录下是否残留tomcat相关jar包 - 静态资源路径需要从
classpath:/static/改为/ - 建议添加打包时间戳便于版本管理:
<build> <finalName>${project.artifactId}-${maven.build.timestamp}</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> </plugin> </plugins> </build>2.2 前端特殊处理
前端Vue项目的改造比后端更复杂,关键步骤:
- 修改
vue.config.js中的publicPath:
module.exports = { publicPath: process.env.NODE_ENV === 'production' ? '/' : '/', }- 生产环境接口地址配置(.env.production):
VUE_APP_BASE_API = '/api'- 打包后必须执行的操作:
# 在dist目录下创建WEB-INF/web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app> <error-page> <error-code>404</error-code> <location>/index.html</location> </error-page> </web-app> # 打包成WAR cd dist && jar -cvf frontend.war *3. TongWeb7配置详解
3.1 虚拟主机配置
在TongWeb控制台(默认地址http://ip:9060/console)中:
- 创建虚拟主机时建议配置以下JVM参数:
-Dfile.encoding=UTF-8 -Ddm.jdbc.charset=GBK -Xms2048m -Xmx4096m- 内存溢出防护配置(关键!):
cacheMaxSize=5120000 cachingAllowed=true enableHotDeploy=false3.2 HTTP通道设置
通道配置相当于Nginx的server配置,具体参数对照:
| Nginx配置项 | TongWeb对应位置 |
|---|---|
| listen 8080 | 监听端口 |
| server_name | 虚拟主机别名 |
| location /api | 应用上下文路径 |
| proxy_pass | 目标应用部署路径 |
典型问题解决方案:
- 端口冲突:使用
netstat -tlnp检查 - 跨域问题:在通道配置中启用CORS过滤器
- 静态资源404:检查虚拟主机的
docBase路径
4. 达梦数据库深度适配
4.1 驱动兼容性处理
达梦JDBC驱动需要特别注意:
// 推荐连接参数 String url = "jdbc:dm://host:port/DB?zeroDateTimeBehavior=convertToNull&useSSL=false";驱动文件通常需要手动放入TongWeb的lib目录:
cp dm-jdbc-driver.jar $TONGWEB_HOME/lib/ext/4.2 常见SQL兼容问题
问题排查表:
| 问题现象 | 解决方案 |
|---|---|
| LIMIT报错 | 改用达梦方言SELECT * FROM t FETCH FIRST 10 ROWS ONLY |
| 日期格式不匹配 | 在连接串添加dateFormat=yyyy-MM-dd |
| 批量插入失败 | 添加allowMultiQueries=true参数 |
4.3 性能调优建议
- 连接池配置示例(Druid):
spring.datasource.druid.initial-size=5 spring.datasource.druid.max-active=20 spring.datasource.druid.validation-query=SELECT 1 FROM DUAL- 达梦服务端优化:
-- 执行统计信息收集 CALL SP_CREATE_SYSTEM_PACKAGES();5. 部署后监控与排错
5.1 日志配置技巧
建议修改logback-spring.xml增加:
<appender name="TONGWEB" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${TONGWEB_HOME}/logs/app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${TONGWEB_HOME}/logs/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>100MB</maxFileSize> <maxHistory>30</maxHistory> </rollingPolicy> </appender>5.2 常见错误速查
- ClassNotFoundException: 检查WAR包的WEB-INF/lib是否完整
- 静态资源加载失败: 确认虚拟主机的docBase指向正确
- 数据库连接超时: 检查达梦服务状态
systemctl status DmService
5.3 性能监控方案
推荐集成Prometheus监控:
- 添加依赖:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>- 配置端点:
management.endpoints.web.exposure.include=health,info,prometheus management.metrics.tags.application=${spring.application.name}迁移完成后,记得用ab或JMeter做压力测试。我在测试环境对比发现,同样的硬件配置下,TongWeb7在处理高并发请求时,内存占用比Tomcat低15%左右,但线程调度效率需要针对达梦特性做专门优化。