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

手把手教你用TongWeb7部署SpringBoot微服务(含多服务部署技巧)

手把手教你用TongWeb7部署SpringBoot微服务含多服务部署技巧在国产化技术快速发展的今天越来越多的企业开始将应用从Tomcat迁移到国产中间件平台。TongWeb作为国产应用服务器的代表产品凭借其高性能、高可靠性和完善的国产化适配能力正成为SpringBoot微服务部署的新选择。本文将全面解析如何在TongWeb7上部署SpringBoot微服务包括单服务部署、多服务共存方案以及实际项目中的经验技巧。1. 环境准备与基础配置在开始部署前我们需要完成TongWeb7的基础环境搭建。与Tomcat不同TongWeb7提供了更丰富的企业级功能同时也需要一些特定的配置。TongWeb7安装步骤从官网下载TongWeb7的安装包通常为zip格式解压到指定目录建议路径不要包含中文或空格配置环境变量# Linux示例 export TONGWEB_HOME/opt/TongWeb7 export PATH$PATH:$TONGWEB_HOME/binTongWeb7的目录结构与Tomcat类似但更加丰富TongWeb7/ ├── bin/ # 启动脚本 ├── conf/ # 配置文件 ├── lib/ # 核心库文件 ├── logs/ # 日志文件 ├── temp/ # 临时文件 ├── webapps/ # 应用部署目录 └── work/ # 工作目录关键配置文件说明conf/server.xml主配置文件可配置端口、连接器等conf/context.xml全局上下文配置conf/logging.properties日志配置提示首次启动前建议修改默认的管理员密码可通过conf/tomcat-users.xml配置访问权限。2. SpringBoot项目改造为WAR包要将SpringBoot项目部署到TongWeb7首先需要将项目从默认的JAR包改为WAR包格式。这一过程涉及多个关键步骤的改造。2.1 POM文件改造首先修改项目的pom.xml文件确保正确排除内嵌Tomcat并添加必要的依赖!-- 修改打包方式为war -- packagingwar/packaging dependencies !-- 排除内嵌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 !-- 添加servlet-api依赖 -- dependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId scopeprovided/scope /dependency /dependencies !-- 配置war包插件 -- build finalName${project.artifactId}/finalName plugins plugin artifactIdmaven-war-plugin/artifactId version3.3.2/version configuration failOnMissingWebXmlfalse/failOnMissingWebXml /configuration /plugin /plugins /build2.2 启动类改造SpringBoot的启动类需要继承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); } }2.3 配置文件调整在application.properties或application.yml中需要调整一些与部署相关的配置server: servlet: context-path: /api # 设置应用上下文路径 tongweb: uri-encoding: UTF-8 # 设置TongWeb特有的编码配置3. 单服务部署实战完成项目改造后我们可以开始实际的部署过程。TongWeb7提供了多种部署方式下面介绍最常用的几种方法。3.1 控制台部署TongWeb7提供了Web管理控制台可以通过图形界面进行应用部署启动TongWeb7服务cd $TONGWEB_HOME/bin ./startup.sh # Linux startup.bat # Windows访问管理控制台默认地址http://localhost:9060/console在应用管理中选择部署应用上传WAR包设置应用上下文路径和其他参数点击部署按钮完成部署3.2 命令行部署对于自动化部署场景可以使用命令行工具# 将war包复制到webapps目录 cp target/your-app.war $TONGWEB_HOME/webapps/ # 或者使用TongWeb提供的部署工具 $TONGWEB_HOME/bin/deploy.sh --deploy $TONGWEB_HOME/webapps/your-app.war3.3 热部署与调试开发环境下可以配置热部署以提高效率在IDE中配置远程调试# 启动TongWeb时添加调试参数 ./startup.sh -debug 5005在IDE中创建Remote JVM Debug配置连接5005端口使用reloadabletrue特性在context.xml中配置实现类热加载4. 多服务部署方案在实际生产环境中经常需要在一个TongWeb实例中部署多个微服务。TongWeb7提供了两种主流的多服务部署方案。4.1 多虚拟主机方案通过配置多个虚拟主机(virtual host)实现服务隔离修改conf/server.xml添加多个Host配置Engine nameCatalina defaultHostlocalhost Host namelocalhost appBasewebapps unpackWARstrue Context path docBaseservice1 reloadabletrue/ /Host Host nameservice2.example.com appBasewebapps2 Context path docBaseservice2 reloadabletrue/ /Host /Engine为每个服务创建独立的webapps目录配置DNS或修改本地hosts文件解析域名优缺点对比方案优点缺点多虚拟主机完全隔离各自独立配置需要域名支持配置复杂多上下文配置简单资源共享隔离性较差可能产生冲突4.2 多上下文路径方案通过不同的上下文路径区分服务将不同服务的WAR包命名为不同名称上传到webapps目录webapps/ ├── service1.war └── service2.war或者通过context.xml单独配置每个服务Context path/service1 docBase/path/to/service1.war/ Context path/service2 docBase/path/to/service2.war/4.3 服务注册特殊处理当使用Nacos等注册中心时多服务部署需要特殊处理端口注册问题Configuration public class NacosConfig implements ApplicationRunner { Autowired(required false) private NacosAutoServiceRegistration registration; Value(${server.port}) private Integer port; Override public void run(ApplicationArguments args) throws Exception { if (registration ! null) { // 获取实际运行时端口 Integer runtimePort getRuntimePort(); registration.setPort(runtimePort); registration.start(); } } private Integer getRuntimePort() throws Exception { MBeanServer beanServer ManagementFactory.getPlatformMBeanServer(); SetObjectName connectors beanServer.queryNames( new ObjectName(*:typeConnector,*), Query.match(Query.attr(protocol), Query.value(HTTP/1.1)) ); return Integer.valueOf( connectors.iterator().next().getKeyProperty(port) ); } }5. 常见问题与解决方案在实际部署过程中可能会遇到各种问题。下面列出一些典型问题及其解决方法。5.1 依赖冲突问题问题现象应用启动时报NoClassDefFoundError或ClassNotFoundException解决方案检查并排除冲突的依赖exclusions exclusion groupId冲突的groupId/groupId artifactId冲突的artifactId/artifactId /exclusion /exclusions使用TongWeb提供的依赖分析工具$TONGWEB_HOME/bin/dependency-check.sh your-app.war5.2 编码问题问题现象请求参数乱码或响应内容编码错误解决方案在TongWeb的server.xml中配置URI编码Connector port8080 URIEncodingUTF-8/在应用的web.xml中添加编码过滤器filter filter-nameencodingFilter/filter-name filter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-class init-param param-nameencoding/param-name param-valueUTF-8/param-value /init-param init-param param-nameforceEncoding/param-name param-valuetrue/param-value /init-param /filter5.3 性能调优建议TongWeb7提供了丰富的性能调优参数以下是一些关键配置连接器调优Connector port8080 maxThreads500 minSpareThreads50 acceptCount300 connectionTimeout20000 maxConnections1000/JVM调优建议# 在startup.sh中设置JVM参数 JAVA_OPTS-server -Xms4g -Xmx4g -XX:MetaspaceSize256m -XX:MaxMetaspaceSize512m会话配置Manager classNamecom.tongweb.web.session.StandardManager maxActiveSessions1000 sessionTimeout30/6. 进阶技巧与最佳实践6.1 集群部署方案TongWeb7支持多种集群部署方式以下是常见的两种方案方案一基于Nginx的负载均衡客户端 → Nginx → [TongWeb实例1, TongWeb实例2, ...]方案二TongWeb内置集群修改conf/server.xml配置集群Cluster classNamecom.tongweb.web.cluster.StandardCluster/在应用的web.xml中配置distributable/6.2 健康检查与监控TongWeb7提供了完善的监控接口可以通过JMX或HTTP端点获取运行状态常用监控端点/manager/status查看应用状态/manager/jmxproxyJMX代理接口/actuator/healthSpringBoot应用自定义健康检查Component public class CustomHealthIndicator implements HealthIndicator { Override public Health health() { // 实现自定义健康检查逻辑 return Health.up().withDetail(detail, OK).build(); } }6.3 安全加固建议禁用管理界面生产环境建议禁用或限制访问管理控制台定期更新及时安装TongWeb的安全补丁权限控制严格配置文件和目录的访问权限日志审计开启访问日志和安全审计日志!-- 在server.xml中配置访问日志 -- Valve classNamecom.tongweb.web.accesslog.AccessLogValve directorylogs prefixaccess_log suffix.txt pattern%h %l %u %t quot;%rquot; %s %b /在实际项目中我们遇到过因上下文路径配置不当导致的微服务间调用失败问题。通过将网关和服务的前缀统一配置为/并确保所有服务使用相对路径进行调用最终解决了这一问题。TongWeb7的虚拟主机功能在解决多租户隔离需求时表现出色特别是配合Nginx的域名路由可以实现灵活的部署架构。

相关文章:

手把手教你用TongWeb7部署SpringBoot微服务(含多服务部署技巧)

手把手教你用TongWeb7部署SpringBoot微服务(含多服务部署技巧) 在国产化技术快速发展的今天,越来越多的企业开始将应用从Tomcat迁移到国产中间件平台。TongWeb作为国产应用服务器的代表产品,凭借其高性能、高可靠性和完善的国产化…...

SpringBoot中@PostConstruct和@Async搭配使用详解:避开‘同类调用’这个大坑

SpringBoot中PostConstruct与Async的协同陷阱:原理剖析与实战解决方案 在SpringBoot应用启动过程中,我们常常需要执行一些初始化操作。PostConstruct注解标注的方法会在依赖注入完成后自动执行,而Async则可以将方法调用转为异步执行。当两者结…...

Z-Image-GGUF与ComfyUI工作流整合:可视化节点式图像生成教程

Z-Image-GGUF与ComfyUI工作流整合:可视化节点式图像生成教程 如果你已经玩过一些AI绘画工具,比如Stable Diffusion WebUI,可能会觉得它功能强大,但有时候操作起来像在填表格,流程不够直观。今天,我想跟你聊…...

BlinkTimer:基于GyverTimerMs的嵌入式LED状态机插件

1. BlinkTimer:基于GyverTimerMs的嵌入式LED闪烁状态机插件1.1 设计定位与工程价值BlinkTimer并非独立定时器库,而是专为GyverTimerMs(以下简称TimerMs)设计的轻量级功能插件。其核心价值在于将“闪烁”这一高频硬件操作抽象为可查…...

Nano-Banana实战教程:生成带中英文双语标注的产品结构分解图

Nano-Banana实战教程:生成带中英文双语标注的产品结构分解图 1. 这不是普通AI绘图工具,而是你的结构拆解搭档 你有没有遇到过这样的情况:刚拿到一款新设计的蓝牙耳机,想快速搞懂它内部怎么组装的;或者正在为运动鞋做…...

嵌入式MCU选型十步法:系统级工程决策指南

1. 微控制器选型的系统性工程方法微控制器(MCU)作为嵌入式系统的核心,其选型绝非简单的参数比对或品牌偏好,而是一项融合硬件约束、软件架构、供应链管理与产品生命周期规划的系统性工程决策。尽管MCU技术迭代迅速,从8…...

Qwen3-14B-Int4-AWQ智能体(Agent)开发入门:技能创建与任务规划

Qwen3-14B-Int4-AWQ智能体开发入门:技能创建与任务规划 1. 智能体开发初探 想象一下,你正在和一个数字助手对话,它不仅能够回答问题,还能主动规划并执行多步骤任务——比如先查询天气,然后根据温度推荐合适的穿搭&am…...

PushedSSD1306:跨平台零成本OLED显示驱动库

1. PushedSSD1306库概述PushedSSD1306是一个面向嵌入式平台的C SSD1306 OLED显示驱动库,专为12864和12832单色OLED显示屏设计。其核心定位是硬件抽象层无关性与字体资源灵活性,区别于多数Arduino生态中强耦合Wire.h、硬编码PROGMEM字体、或仅支持固定字库…...

Ollama部署本地大模型新体验:LFM2.5-1.2B-Thinking在Mac M系列芯片实测分享

Ollama部署本地大模型新体验:LFM2.5-1.2B-Thinking在Mac M系列芯片实测分享 1. 为什么要在Mac上部署本地大模型? 如果你正在寻找一个既强大又轻量的本地AI助手,LFM2.5-1.2B-Thinking模型绝对值得关注。这个仅有1.2B参数的模型,却…...

[具身智能-81]:MoveIt 2,ROS 2 生态系统中最核心、功能最强大的运动规划框架

MoveIt 2 是 ROS 2 生态系统中最核心、功能最强大的运动规划框架。它是 ROS 1 中 MoveIt 的全面重构版本,专为 ROS 2 的分布式、实时性和模块化架构设计。截至 2026 年 3 月,MoveIt 2 已经非常成熟,是开发机械臂抓取、避障、复杂轨迹规划的首…...

如何快速构建高质量个人音乐库:网易云音乐下载器完整指南

如何快速构建高质量个人音乐库:网易云音乐下载器完整指南 【免费下载链接】netease-cloud-music-dl Netease cloud music song downloader, with full ID3 metadata, eg: front cover image, artist name, album name, song title and so on. 项目地址: https://g…...

Qwen3Guard-Gen-WEB应用解析:如何将它集成到现有系统做内容把关?

Qwen3Guard-Gen-WEB应用解析:如何将它集成到现有系统做内容把关? 在当今数字化内容爆炸式增长的时代,内容安全已成为各类在线平台不可忽视的核心需求。从社交媒体到电商平台,从在线教育到企业服务,如何有效过滤不良内…...

STM32L476段码LCD驱动库:硬件级LCD控制器直控方案

1. 项目概述 LCD_DISCO_L476VG 是专为意法半导体(STMicroelectronics)Discovery Kit STM32L476G-DISCO 开发板设计的 LCD 驱动类库。该库并非通用型 LCD 抽象层,而是深度耦合于 DISCO_L476VG 硬件平台,面向其板载的 GH08172T…...

Keil MDK内存分析工具:嵌入式Flash/RAM占用可视化

1. Keil MDK 编译信息增强工具:面向嵌入式开发者的内存分析实践在嵌入式固件开发流程中,编译阶段生成的链接映射(Map)文件与列表(Listing)文件是理解资源占用、定位瓶颈、保障系统稳定性的核心依据。然而&a…...

基于STM32单片机智能景区检票系统人脸识别电子密码锁RFID刷卡门禁锁WiFi手机APP设计+二维码识别模块识别二维码设计26-072

26-072、基于STM32单片机智能景区检票系统人脸识别电子密码锁RFID刷卡门禁锁WiFi手机APP设计二维码识别模块识别二维码设计STM32单片机人脸识别(管理)RFID刷卡二维码扫码识别密码可设TFT屏舵机蜂鸣器矩阵按键WiFi手机APP产品功能描述:本系统由STM32F103C8T6单片机核…...

字节跳动开源TRAE AI编程IDE实战:5天搞定Python+Vue全栈开发(含避坑指南)

字节跳动开源TRAE AI编程IDE实战:5天搞定PythonVue全栈开发(含避坑指南) 当技术栈的边界逐渐模糊,全栈开发者的效率瓶颈愈发明显。传统开发中,一个简单的员工管理系统可能需要前后端开发者数周的协作,而如今…...

Qwen-Image镜像详细步骤:RTX4090D上从实例启动到Qwen-VL首次推理仅需3分钟

Qwen-Image镜像详细步骤:RTX4090D上从实例启动到Qwen-VL首次推理仅需3分钟 1. 镜像概述与核心优势 Qwen-Image定制镜像是专为RTX 4090D显卡优化的多模态大模型推理环境,预装了完整的CUDA 12.4工具链和Qwen-VL视觉语言模型所需的所有依赖项。这个镜像最…...

Java JDK 21 安装与开发环境一站式配置指南

1. Java JDK 21 安装全流程详解 Java开发环境的搭建是每个Java程序员的第一步。作为长期使用Java的老手,我经历过从JDK 1.4到现在的JDK 21的各个版本升级,深知一个正确的安装过程能避免后续开发中的很多麻烦。下面我就带大家一步步完成JDK 21的安装。 首…...

EverythingPowerToys:Windows文件检索效率工具深度指南

EverythingPowerToys:Windows文件检索效率工具深度指南 【免费下载链接】EverythingPowerToys Everything search plugin for PowerToys Run 项目地址: https://gitcode.com/gh_mirrors/ev/EverythingPowerToys 在数字化办公环境中,文件检索效率直…...

信捷XD与英威腾GD变频器通讯程序实战(XJXD - 14

信捷XD与英威腾GD变频器通讯程序(XJXD-14)可直接用于实际的程序带注释,并附送触摸屏有接线方式和设置,通讯地址说明等。 程序采用轮询,可靠稳定器件:信捷XD5的PLC,英威腾GD系列变频器,昆仑通态7022Ni 功能&…...

HTTPS】从TLS 1.2到1.3:tcpdump抓包实战与协议升级解析

1. HTTPS与TLS协议基础扫盲 第一次接触HTTPS时,我也被那些专业术语搞得头晕眼花。简单来说,HTTPS就是在HTTP外面套了层加密外壳,而TLS(传输层安全协议)就是这件"加密外套"的制作标准。就像手机系统从iOS 12升…...

YOLO-V5快速上手:3步完成物体检测,小白也能轻松搞定

YOLO-V5快速上手:3步完成物体检测,小白也能轻松搞定 1. 环境准备:5分钟完成部署 YOLO-V5作为当前最流行的目标检测框架之一,以其部署简单、运行高效著称。让我们从零开始搭建开发环境: 1.1 获取镜像 推荐使用预装完…...

国风美学生成模型v1.0安全考量:在公网部署时的网络安全防护策略

国风美学生成模型v1.0安全考量:在公网部署时的网络安全防护策略 最近,我们团队把那个很受欢迎的国风美学生成模型v1.0,从内部测试环境搬到了公网上,让更多用户能直接体验。这事儿听起来挺酷,但说实话,从服…...

存算一体SoC的C语言内存模型重构:为什么__builtin_assume_aligned()在HBM通道下失效?揭秘3代国产AI芯片实测对比

第一章:存算一体SoC的C语言内存模型重构:为什么__builtin_assume_aligned()在HBM通道下失效?揭秘3代国产AI芯片实测对比在存算一体SoC架构中,HBM(High Bandwidth Memory)通道与传统DDR存在根本性差异&#…...

从计算机组成原理视角优化GLM-OCR推理:内存与计算资源管理

从计算机组成原理视角优化GLM-OCR推理:内存与计算资源管理 你是不是也遇到过这种情况:好不容易部署好一个像GLM-OCR这样的视觉大模型,准备用它批量处理图片,结果发现速度慢得让人着急,电脑风扇还呼呼作响?…...

FireRed-OCR自动化部署指南:封装REST API,实现多格式文档一键解析

FireRed-OCR自动化部署指南:封装REST API,实现多格式文档一键解析 1. 从像素风界面到工业级API服务 还记得第一次打开FireRed-OCR Studio时那个惊艳的像素风界面吗?红色卡带配色、GBA风格的对话框,让文档解析这个严肃的工作突然…...

CC3000 Wi-Fi主机驱动与mbedsocket接口适配指南

1. 项目概述cc3000_hostdriver_mbedsocket是一个面向嵌入式平台的 Wi-Fi 主机驱动适配层,其核心目标是将 Texas Instruments(TI)CC3000 Wi-Fi 网络协处理器(Network Processor, NP)的底层硬件交互能力,无缝…...

ARM设备上5分钟搞定containerd二进制安装(附国内镜像加速配置)

ARM架构设备极速部署containerd全指南:从二进制安装到镜像加速优化 在边缘计算和物联网设备爆发式增长的今天,ARM架构处理器凭借其低功耗、高能效的特性,正成为智能终端设备的首选。而作为容器生态中的核心运行时,containerd以其轻…...

Windows Precision Touchpad 驱动深度解析:Apple 触控板在 Windows 系统的技术实现

Windows Precision Touchpad 驱动深度解析:Apple 触控板在 Windows 系统的技术实现 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/m…...

Teensy 4.x纳秒级WS2812时序捕获与协议分析

1. WS2812Capture 库深度解析:Teensy 4.x 平台上的高精度 WS2812 时序捕获与分析系统WS2812 系列可寻址 LED(如常见的 NeoPixel)因其单线串行协议、高集成度和丰富色彩表现,已成为嵌入式灯光控制领域的事实标准。然而,…...