Spring Boot项目WAR包部署至东方通TongWeb的实战避坑指南
1. 项目改造从JAR到WAR的关键步骤当你需要将Spring Boot项目部署到东方通TongWeb时第一步就是把项目从默认的JAR包改为WAR包。这个改造过程看似简单但有几个关键点需要注意。首先修改pom.xml文件。这里有三处必须改动的地方!-- 1. 修改打包方式为war -- packagingwar/packaging !-- 2. 排除内嵌Tomcat -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-tomcat/artifactId scopeprovided/scope /dependency !-- 3. 配置maven-war-plugin插件 -- plugin artifactIdmaven-war-plugin/artifactId version2.6/version configuration failOnMissingWebXmlfalse/failOnMissingWebXml /configuration /plugin启动类也需要做相应调整。继承SpringBootServletInitializer并重写configure方法是关键SpringBootApplication public class Application extends SpringBootServletInitializer { Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }我遇到过不少开发者在这里踩坑。最常见的问题是忘记排除内嵌Tomcat导致部署后出现类冲突。另一个常见错误是没配置failOnMissingWebXml参数导致打包失败。记住现代Spring Boot项目通常没有web.xml文件所以必须将这个参数设为false。2. WAR包构建与验证完成项目改造后接下来就是构建WAR包。执行mvn clean package命令后你会在target目录下看到生成的WAR文件。这里有几个验证点需要注意检查文件大小通常WAR包会比JAR包大一些因为包含了更多Web容器相关的文件解压检查结构可以用unzip命令查看WAR包内部结构确保WEB-INF目录存在检查依赖确保lib目录下没有Tomcat相关的jar包一个常见的错误是前端资源放置位置不对。在Spring Boot项目中静态资源应该放在以下位置之一src/main/resources/staticsrc/main/resources/publicsrc/main/resources/META-INF/resources我遇到过项目部署后前端页面404的问题最后发现是因为开发团队把前端文件放在了src/main/webapp目录下而这个目录在Spring Boot项目中默认是不被识别的。3. TongWeb环境准备在部署WAR包之前需要确保TongWeb环境配置正确。以下是关键配置步骤字符集设置这是中文环境下最常见的问题来源进入TongWeb控制台(默认地址http://ip:9060/console)找到WEB容器配置 HTTP通道管理将URL编码格式和默认编解码字符集都设为UTF-8内存参数调整特别是部署大型应用时编辑bin/external.vmoptions文件添加或修改以下参数-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize512mHTTP方法支持某些RESTful应用需要修改conf/tongweb.xml确保PUT和DELETE方法没有被禁用我曾在项目中遇到PUT请求返回405错误的问题花了半天时间才发现是TongWeb默认禁用了这些方法。修改配置文件后立即解决了问题。4. 部署WAR包的两种方式TongWeb支持两种主要的部署方式控制台部署和命令行部署。每种方式各有优缺点。4.1 控制台部署步骤登录TongWeb控制台(默认账号thanos/thanos123.com)进入应用管理 部署应用选择本机文件上传WAR包设置应用上下文路径(建议保持与WAR包名一致)选择虚拟主机(默认server)完成部署控制台部署的优点是可视化操作简单缺点是上传大文件时可能超时。我建议超过50MB的WAR包使用命令行部署。4.2 命令行部署方法进入TongWeb的bin目录执行以下命令./commandstool.sh deploy \ --applocation /path/to/your.war \ --contextroot /yourapp \ --defaultvs server \ yourappname参数说明--applocation: WAR包绝对路径--contextroot: 应用访问路径--defaultvs: 虚拟主机名最后一个参数是应用名称命令行部署适合自动化脚本集成特别是在持续集成/持续部署(CI/CD)流程中。我在实际项目中使用Jenkins配合这个命令实现了自动化部署。5. 常见问题排查指南即使按照上述步骤操作部署过程中仍可能遇到各种问题。以下是几个典型问题及解决方案5.1 内存溢出问题症状应用运行一段时间后崩溃日志中出现OutOfMemoryError解决方案修改bin/external.vmoptions文件增加内存参数例如-Xms2048m -Xmx4096m -XX:MaxMetaspaceSize1024m重启TongWeb服务5.2 中文乱码问题症状请求参数或响应内容出现乱码解决方案确认TongWeb的HTTP通道编码设置为UTF-8检查应用本身的字符编码设置如果是GET请求乱码可能需要修改URL编码格式5.3 应用启动失败症状部署后应用状态显示启动失败排查步骤查看logs/server.log日志文件常见原因类冲突检查是否有重复的jar包数据库连接失败检查连接配置端口冲突检查应用配置的端口是否被占用5.4 静态资源404问题症状页面可以访问但CSS/JS等资源加载失败解决方案检查资源文件是否被打包到WAR中正确位置确认上下文路径配置正确检查TongWeb的静态资源缓存设置6. 多应用部署策略当需要在同一台服务器上部署多个应用时有两种主要方案6.1 多domain方式这是官方推荐的方式每个应用有独立的运行环境# 创建新domain ./domain.sh create yourdomain # 启动特定domain ./startservernohub.sh yourdomain优点应用完全隔离端口自动递增(9060,9061,...)独立日志文件缺点占用更多内存资源6.2 多HTTP通道方式通过创建多个HTTP通道实现创建新的虚拟主机创建新的HTTP通道并绑定到该虚拟主机部署应用时选择对应的虚拟主机优点资源占用较少配置相对简单缺点应用共享同一JVM日志文件混合在实际项目中我通常建议对重要应用使用多domain方式对小型辅助应用可以使用多HTTP通道方式。7. 性能调优建议部署成功后还可以进行一些性能优化连接池配置调整TongWeb的线程池大小根据应用特点设置合适的最大连接数JVM调优根据服务器内存情况调整堆大小选择合适的GC算法静态资源缓存配置适当的缓存头启用gzip压缩会话管理对于集群环境配置合适的会话复制策略设置合理的会话超时时间我曾经优化过一个性能很差的应用通过调整线程池参数和JVM配置将响应时间从2秒降低到了200毫秒左右。这说明适当的调优可以带来显著的性能提升。8. 日常维护技巧最后分享几个日常维护中的实用技巧日志管理定期清理logs目录下的日志文件配置日志轮转策略监控建议监控关键指标内存使用、线程数、请求响应时间设置合理的告警阈值备份策略定期备份应用配置备份重要的部署描述文件升级注意事项先在小规模环境测试升级做好回滚方案检查兼容性列表记住任何配置修改后都需要重启TongWeb才能生效。在生产环境中建议在低峰期进行重启操作并确保有完善的监控可以快速发现问题。