当前位置: 首页 > 产品大全 > 在单个 Azure 应用服务中同时部署并运行多个 Java 应用

在单个 Azure 应用服务中同时部署并运行多个 Java 应用

在单个 Azure 应用服务中同时部署并运行多个 Java 应用

在 Azure 应用服务(App Service)中,通常一个 App Service 实例部署一个应用。但有时出于节省成本、简化管理或合并小型服务的需求,我们希望在一个 App Service 中同时运行两个或更多 Java 应用(如 Spring Boot、Tomcat WAR 等)。Azure 应用服务本身支持通过多种方式实现这一目标。\n\n## 一、为什么需要在一个 App Service 中运行多个 Java 应用?\n\n- 成本优化:多个轻量级应用共享同一个应用服务计划,避免为每个应用单独创建 App Service。\n- 简化运维:统一管理环境变量、部署槽、监控和缩放。\n- 合并微服务:适合小型内部服务或原型阶段。\n- 资源利用率:充分利用已分配的计算资源。\n\n## 二、主流实现方案\n\n### 方案 1:使用嵌入式 Tomcat/Jetty + 自定义启动脚本\n\n这是最灵活也最常用的方法。核心思想是在 App Service 的启动命令中同时启动多个 Java 进程或一个进程内启动多个 Web 上下文。\n\n#### 1.1 将多个 Spring Boot 应用打包为可执行 JAR\n\n- 分别构建 app1.jar 和 app2.jar。\n- 将它们放在同一个部署包中(例如通过 FTP 或 ZIP 部署到 /home/site/wwwroot)。\n- 使用不同的端口(如 8080 和 8081)启动。\n\n#### 1.2 编写启动脚本 startup.sh\n\n`bash\n#!/bin/bash\ncd /home/site/wwwroot\njava -jar app1.jar --server.port=8080 &\njava -jar app2.jar --server.port=8081 &\n# 等待任一进程退出,保持容器运行\nwait\n# 也可以使用 nohup 并重定向日志\n`\n\n#### 1.3 配置 App Service 启动命令\n\n在 Azure 门户中,进入“配置”->“常规设置”->“启动命令”,填入:\n`\n/home/site/wwwroot/startup.sh\n`\n\n注意: Linux 应用服务需要确保 startup.sh 有执行权限(chmod +x)。可以在部署脚本中完成。\n\n#### 1.4 通过反向代理暴露两个应用\n\nApp Service 只暴露一个 80/443 端口。若要通过同一域名访问两个应用,可以:\n\n- 在其中一个 Java 应用中增加一个简单的反向代理(例如使用 Spring Cloud Gateway)将不同路径转发到内部端口。\n- 或者使用另一个轻量级反向代理,如 Nginx,但需要自定义容器或使用外部方式。既然已经用了 Java,添加 Spring Cloud Gateway 最为自然。\n\n### 方案 2:使用 Azure 应用服务的内置 Tomcat 部署多个 WAR\n\n如果你使用的是 Java SE 还是 Tomcat?Azure 应用服务支持 Tomcat 运行时(Linux 或 Windows)。\n\n#### 2.1 在 Linux 上使用 Tomcat\n\n- 将多个 WAR 文件放进 webapps 目录?默认 Docker 镜像中的 Tomcat 只部署一个上下文。可以通过放置多个 WAR 到 webapps 来实现。\n- 但更高版本可能只部署 ROOT.war。可以由 WARE 部署到 /home/site/wwwroot 并由 Tomcat 自动部署所有 WAR。\n\n需要确认使用的应用程序服务堆栈是 Tomcat,那么 /home/site/wwwroot 中的 WAR 都会被 Tomcat 自动部署。详见微软文档。\n\n目前允许在 /home/site/wwwroot 中放置多个 .war 文件,每个按名称部署在根上下文不同路径下。这种方法无需其他配置。\n\n优点: 零配置。缺点: Java 版本、Tomcat 配置由 Azure 决定。\n\n#### 2.2 自定义 POM 或 Modifying web.xml\n\n但不如方案 1 灵活,因为某些 Azure Toast 策略会有些限制。若你想在现有 JAR 环境下(/home/site/wwwroot/app.jar)则只需要一次运行 jar?但那只是一个服务?被限制一个?app.service.appkey = JAR 会复制只能使用一个 jars to Zeka 通过 Bash / command line staru up enderscript own contains three. **\nbut wait: so careful: Application settings App Service JAVAOPTS may setting do it even simpler: Override CP How a test does now? Let under drive side have logic here.\n\nHmm 这是一个非常拗口的感觉。采用大公司在实际规划下的 approach is to:\n\n让我们 turn more systematic. Use a sample simple here implement:\n\n---\nLet’s us B&sample scheme of root nginx reverse delegation irrelevant absent. Return to earlier point done.\n\nThe critical main obstacle by deployment form factors:\


如若转载,请注明出处:http://www.tzhy6.com/product/2.html

更新时间:2026-10-23 14:53:45