当前位置: 首页 > article >正文

SpringBoot项目从Tomcat迁移到东方通TongWeb7的保姆级避坑指南(含达梦数据库适配)

SpringBoot项目从Tomcat迁移到东方通TongWeb7的完整实战手册含达梦数据库适配在国产化技术栈替代浪潮中中间件迁移是每个Java开发者必须掌握的技能。最近带队完成了基于若依框架的SpringBoot系统从Tomcat到TongWeb7的完整迁移过程中踩过的坑、解决的难题今天用最接地气的方式分享给大家。这份指南不仅适用于若依框架任何SpringBoot项目的中间件国产化改造都能从中获得启发。1. 环境准备与依赖调整1.1 移除Tomcat依赖首先打开项目的pom.xml文件关键修改点有两个!-- 移除内嵌Tomcat -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId exclusions exclusion groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-tomcat/artifactId /exclusion /exclusions /dependency !-- 修改打包方式 -- packagingwar/packaging特别注意与网上大部分教程不同TongWeb7不需要额外添加适配依赖。实际测试发现直接排除Tomcat后打包的WAR包在TongWeb7上运行更稳定。1.2 配置文件改造迁移后配置文件需要特别注意以下参数配置项Tomcat环境值TongWeb适配值说明server.port8080无效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: redis123实际踩坑记录达梦数据库连接串中的端口号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 groupIdorg.apache.maven.plugins/groupId artifactIdmaven-war-plugin/artifactId /plugin /plugins /build2.2 前端特殊处理前端Vue项目的改造比后端更复杂关键步骤修改vue.config.js中的publicPathmodule.exports { publicPath: process.env.NODE_ENV production ? / : /, }生产环境接口地址配置.env.productionVUE_APP_BASE_API /api打包后必须执行的操作# 在dist目录下创建WEB-INF/web.xml ?xml version1.0 encodingUTF-8? web-app error-page error-code404/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.encodingUTF-8 -Ddm.jdbc.charsetGBK -Xms2048m -Xmx4096m内存溢出防护配置关键cacheMaxSize5120000 cachingAllowedtrue enableHotDeployfalse3.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?zeroDateTimeBehaviorconvertToNulluseSSLfalse;驱动文件通常需要手动放入TongWeb的lib目录cp dm-jdbc-driver.jar $TONGWEB_HOME/lib/ext/4.2 常见SQL兼容问题问题排查表问题现象解决方案LIMIT报错改用达梦方言SELECT * FROM t FETCH FIRST 10 ROWS ONLY日期格式不匹配在连接串添加dateFormatyyyy-MM-dd批量插入失败添加allowMultiQueriestrue参数4.3 性能调优建议连接池配置示例Druidspring.datasource.druid.initial-size5 spring.datasource.druid.max-active20 spring.datasource.druid.validation-querySELECT 1 FROM DUAL达梦服务端优化-- 执行统计信息收集 CALL SP_CREATE_SYSTEM_PACKAGES();5. 部署后监控与排错5.1 日志配置技巧建议修改logback-spring.xml增加appender nameTONGWEB classch.qos.logback.core.rolling.RollingFileAppender file${TONGWEB_HOME}/logs/app.log/file rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy fileNamePattern${TONGWEB_HOME}/logs/app.%d{yyyy-MM-dd}.%i.log/fileNamePattern maxFileSize100MB/maxFileSize maxHistory30/maxHistory /rollingPolicy /appender5.2 常见错误速查ClassNotFoundException: 检查WAR包的WEB-INF/lib是否完整静态资源加载失败: 确认虚拟主机的docBase指向正确数据库连接超时: 检查达梦服务状态systemctl status DmService5.3 性能监控方案推荐集成Prometheus监控添加依赖dependency groupIdio.micrometer/groupId artifactIdmicrometer-registry-prometheus/artifactId /dependency配置端点management.endpoints.web.exposure.includehealth,info,prometheus management.metrics.tags.application${spring.application.name}迁移完成后记得用ab或JMeter做压力测试。我在测试环境对比发现同样的硬件配置下TongWeb7在处理高并发请求时内存占用比Tomcat低15%左右但线程调度效率需要针对达梦特性做专门优化。

相关文章:

SpringBoot项目从Tomcat迁移到东方通TongWeb7的保姆级避坑指南(含达梦数据库适配)

SpringBoot项目从Tomcat迁移到东方通TongWeb7的完整实战手册(含达梦数据库适配) 在国产化技术栈替代浪潮中,中间件迁移是每个Java开发者必须掌握的技能。最近带队完成了基于若依框架的SpringBoot系统从Tomcat到TongWeb7的完整迁移&#xff0c…...

WorkshopDL:跨平台玩家的Steam创意工坊下载解决方案

WorkshopDL:跨平台玩家的Steam创意工坊下载解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了游戏,却无法享…...

基于python的人脸识别与智能考勤系统 人脸检测与考勤系统

智能考勤系统(Smart Attendance System)是一个基于Python的项目,它利用人脸识别技术自动化考勤管理。该系统通过摄像头捕捉学生数据,存储人脸编码以及学生详细信息,并通过实时人脸识别来记录考勤。系统还提供了一个使用…...

基于深度学习的unet算法遥感图像分割水体和建筑物等分割检测

UNet 语义分割 概述 本项目旨在开发一个模型,用于对同一地理区域的两幅遥感影像进行变化分割。模型的输入是两张分辨率相同的图像,输出是一张多类别掩膜,用于标识不同类型的变化。这些变化被分为以下几类:建筑物、道路、植被、水…...

从VIN码到冷却液温度:一个真实车载ECU诊断案例,带你吃透UDS 0x22服务

从VIN码到冷却液温度:实战解析UDS 0x22服务的诊断艺术 当4S店的维修技师将诊断仪插入OBD接口,屏幕上瞬间跳动的数据流背后,隐藏着一套精密的车辆"体检"系统。作为诊断协议的核心服务之一,UDS 0x22(ReadDataB…...

Proteus 8.9 找不到Arduino元件库?别慌,手把手教你添加第三方库(附资源)

Proteus 8.9 Arduino元件库缺失解决方案:从资源获取到实战仿真全指南 当你第一次打开Proteus 8.9准备进行Arduino项目仿真时,可能会遇到一个令人沮丧的问题——在元件库中搜索不到任何Arduino相关模块。这种情况在Proteus 8.9标准安装包中相当常见&#…...

一键转换网页图片格式:Save Image as Type完整使用教程

一键转换网页图片格式:Save Image as Type完整使用教程 【免费下载链接】Save-Image-as-Type Save Image as Type is an chrome extension which add Save as PNG / JPG / WebP to the context menu of image. 项目地址: https://gitcode.com/gh_mirrors/sa/Save-…...

3步掌握airPLS基线校正算法:从理论到多语言实践完全指南

3步掌握airPLS基线校正算法:从理论到多语言实践完全指南 【免费下载链接】airPLS baseline correction using adaptive iteratively reweighted Penalized Least Squares 项目地址: https://gitcode.com/gh_mirrors/ai/airPLS 自适应迭代加权惩罚最小二乘法&…...

gifuct-js:前端GIF动画处理的神奇手术刀,让动态图片解析变得轻松自如

gifuct-js:前端GIF动画处理的神奇手术刀,让动态图片解析变得轻松自如 【免费下载链接】gifuct-js Fastest javascript .GIF decoder/parser 项目地址: https://gitcode.com/gh_mirrors/gi/gifuct-js 你是否曾为网页中GIF动画加载缓慢、内存占用高…...

如何快速掌握DSGE建模:宏观经济研究的终极开源模型库指南

如何快速掌握DSGE建模:宏观经济研究的终极开源模型库指南 【免费下载链接】DSGE_mod A collection of Dynare models 项目地址: https://gitcode.com/gh_mirrors/ds/DSGE_mod 作为宏观经济研究者和学习者,你是否曾为DSGE模型的复杂实现而烦恼&…...

给嵌入式新手的RISC-V入门课:手把手拆解蜂鸟E203的流水线与模块(附Verilog代码片段)

给嵌入式新手的RISC-V入门课:手把手拆解蜂鸟E203的流水线与模块 第一次接触RISC-V架构时,我盯着蜂鸟E203的文档看了整整三天——那些流水线示意图和模块划分就像天书一样。直到在仿真器里单步执行第一条指令,看到PC指针跳动的瞬间&#xff0c…...

解密Azure服务总线与逻辑应用的VNET集成

引言 在云计算的环境中,消息队列和事件驱动架构成为了构建可扩展、可靠系统的关键技术。Azure Service Bus作为微软Azure提供的强大消息服务,允许应用程序发送和接收消息,确保消息的可靠传输。然而,在使用Azure Service Bus时,常常会遇到一些配置和集成的问题,特别是在涉…...

Dev Containers 安全性优化终极路线图:基于NIST SP 800-190A的7层防御体系,含OCI镜像扫描+运行时策略引擎集成实录

更多请点击: https://intelliparadigm.com 第一章:Dev Containers 安全性优化的顶层认知与威胁建模 Dev Containers 本质是将开发环境封装在容器中运行,但其默认配置常隐含高风险面:宿主机权限泄露、网络暴露、镜像供应链污染及调…...

Spring AOP 进阶实战:从日志到权限/链路追踪/限流(真正企业用法)

一、前言 上一篇 Spring AOP 从原理到实战(结合事务彻底搞懂) 我们已经搞懂了: ✔ AOP 原理 ✔ Before / After / Around 的区别 ✔ 事务为什么用 AOP 但是很多人学完之后,会有一个问题:AOP 到底在项目里怎么用&…...

为什么大厂AI平台已弃用docker run --rm?揭秘动态设备策略+不可变镜像链的下一代沙箱范式

更多请点击: https://intelliparadigm.com 第一章:Docker Sandbox 运行 AI 代码隔离技术 安全性最佳方案 为什么需要 AI 代码沙箱化执行 AI 模型推理脚本常依赖第三方库(如 PyTorch、Transformers),且可能包含未审核…...

3倍效率突破:douyin-downloader如何重构你的内容获取工作流

3倍效率突破:douyin-downloader如何重构你的内容获取工作流 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...

从实验设计到机器学习:手把手教你用MATLAB拉丁超立方抽样生成高质量训练集

从实验设计到机器学习:MATLAB拉丁超立方抽样实战指南 当面对高维参数空间和计算成本昂贵的仿真模型时,如何用最少的样本点获取最具代表性的数据?拉丁超立方抽样(LHS)作为一种分层采样技术,正在成为机器学习…...

从ResNet到DenseNet:图解Element-wise Add和Concat如何塑造了现代CNN架构

从ResNet到DenseNet:图解Element-wise Add和Concat如何塑造了现代CNN架构 在深度学习的演进历程中,神经网络架构设计经历了从简单堆叠到精心设计的转变。2015年,ResNet通过残差连接(Residual Connection)彻底改变了卷积…...

从‘IndexError’到写出健壮代码:Python异常处理与防御性编程实战指南

从‘IndexError’到写出健壮代码:Python异常处理与防御性编程实战指南 在Python开发中,遇到IndexError: list index out of range几乎是每个开发者都会经历的"成人礼"。但真正优秀的开发者不会止步于解决这个错误,而是会思考&#…...

告别玄学选型:用Python自动化测试英飞凌硅麦IM68A1308的动态范围与电压曲线

告别玄学选型:用Python自动化测试英飞凌硅麦IM68A1308的动态范围与电压曲线 在硬件开发中,模拟麦克风的选型常常陷入"玄学"困境——依赖零星的手动测试数据、模糊的厂商规格书解读,以及难以复现的"经验值"。以英飞凌IM68…...

抖音无水印视频下载终极教程:三步掌握批量下载核心技术

抖音无水印视频下载终极教程:三步掌握批量下载核心技术 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…...

Go语言的runtime.GC垃圾回收器算法演进与未来发展方向

Go语言自2009年诞生以来,其垃圾回收(GC)机制一直是性能优化的核心。从最初的标记-清除算法到如今的三色并发标记,runtime.GC的演进不仅提升了性能,更体现了Go团队对高并发场景的深刻理解。本文将探讨GC算法的演进历程&…...

PyTorch里带下划线的函数(如unsqueeze_)到底怎么用?和普通版有啥区别?

PyTorch中带下划线函数的秘密:从内存管理到编码实践的全方位解析 在PyTorch的API设计中,有一类函数总是带着神秘的下划线后缀,比如unsqueeze_、squeeze_。这些函数与它们的普通版本(如unsqueeze)看似功能相同&#xf…...

Poco:更安全易用的AI智能体框架,OpenClaw的现代化替代方案

1. 项目概述:从OpenClaw到Poco的进化之路如果你和我一样,在过去一年里深度体验过各种AI智能体框架,那么对OpenClaw这个名字一定不会陌生。它作为早期基于Claude Code的智能体实现,确实让我们看到了AI自主执行复杂任务的潜力。但说…...

免费获取Steam创意工坊模组的终极解决方案:WorkshopDL完全指南

免费获取Steam创意工坊模组的终极解决方案:WorkshopDL完全指南 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否曾在其他平台购买了游戏,却发现最精…...

零基础部署腾讯视觉语言模型:Youtu-VL-4B-Instruct环境配置与快速上手指南

零基础部署腾讯视觉语言模型:Youtu-VL-4B-Instruct环境配置与快速上手指南 1. 引言:为什么选择Youtu-VL-4B-Instruct? 如果你正在寻找一个既能理解图片内容,又能进行自然对话的多模态AI助手,腾讯优图实验室开源的You…...

百度网盘秒传链接终极指南:简单快速实现免上传文件分享

百度网盘秒传链接终极指南:简单快速实现免上传文件分享 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 百度网盘秒传链接转存/生成/转换…...

Go微服务开发利器:Kratos Blades工具集核心功能与实战指南

1. 项目概述:一把为Go微服务架构量身定制的“瑞士军刀”如果你正在用Go语言构建微服务,尤其是深度使用Kratos框架,那么你一定对项目依赖管理、代码生成、服务治理这些繁琐但又至关重要的“脏活累活”感到头疼。手动执行go mod tidy、反复敲打…...

Vuls漏洞扫描器实战:无代理架构、多源数据融合与DevSecOps集成

1. 项目概述:Vuls,一个为运维工程师减负的漏洞扫描器在安全运维的日常里,最让人头疼的几件事是什么?是每天手动刷新NVD(美国国家漏洞数据库)看有没有新漏洞影响自己的服务器?是面对成百上千台机…...

3分钟快速上手:如何用Translumo实现Windows屏幕实时翻译?

3分钟快速上手:如何用Translumo实现Windows屏幕实时翻译? 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translum…...