【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)

摘要:
问题描述如何在一个AppService下同时部署和运行多个Java应用程序?由于AppService的默认根目录是wwwroot,因此问题得到了解决。如果需要运行多个Java应用程序,则需要在wwwroot目录中创建一个独立的文件夹来部署jar包和web。配置文件。特别是,您需要在web.config中指定jar包的启动指令。使用mvncleanpackage将其打包到logdemo-1.0-SNAPSHOT中。jar文件,并将其直接拖到AppServicewwwroot目录中。
问题描述

如何在一个AppService下同时部署运行多个Java 应用程序呢?


问题解答

因为App Service的默认根目录为 wwwroot。如果需要运行多个Java 应用程序,需要在 wwwroot目录中创建独立文件夹,用于部署 Jar包 和 web.config 文件,特别注意的时:需要在web.config中指定jar包的启动指令。

如正常部署一个jar包,App Service 根目录下的文件结构如下:
【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)第1张

web.config内容为:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
        </handlers>
        <httpPlatform processPath="%JAVA_HOME%\bin\java.exe"
                      arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\logdemo-1.0-SNAPSHOT.jar&quot;">
        </httpPlatform>
    </system.webServer>
</configuration>

Spring Boot的代码为:

App.Java

package com.example;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {
    private static final Logger logger = LoggerFactory.getLogger(App.class);  

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);

        logger.info("test java logs  : info");        
        logger.error("test java logs  : error");        
        logger.warn("test java logs  : warn");        
        logger.trace("test java logs  : trace" );
        
    }
}

HelloController.java

package com.example;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("/")
    String hello() {
        return "Hello World!";
    }

    @RequestMapping("/newhello")
    String hello2() {
        return "Hello World,this is hello2 result!";
    }
}

PS: 以上Spring Boot代码为Spring 框架默认生成的代码,只是添加了一个hello2的新接口用于测试。

使用 mvn clean package 打包为 logdemo-1.0-SNAPSHOT.jar文件,直接通过拖拽的方式,放入App Service wwwroot 目录中。 当文件上传完成后,直接访问App Service URL查看效果:
【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)第2张


部署多个Spring Boot应用的办法

1: 在wwwroot目录下创建多个应用文件夹,如app1,app2,app3

【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)第3张

2: 把对应的app jar包访问对应文件夹中,然后修改web.config中的路径, 如 %HOME%\site\wwwroot\app3\app.jar

  • httpPlatformHandler 的名称在整个App Service中需要保持唯一,如app3的web.config中handlers的名称为:httpPlatformHandlerapp3
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="httpPlatformHandlerapp3" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
        </handlers>
        <httpPlatform processPath="%JAVA_HOME%\bin\java.exe"
                      arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\app3\app.jar&quot;">
        </httpPlatform>
    </system.webServer>
</configuration>

3: 在 App Service的配置项中,进入"路径映射 Path Mapping",配置Virtual applications

  1. 虚拟路径为:/app1, /app2,/app3
  2. 物理路径为:site/wwwroot/app1, site/wwwroot/app2, site/wwwroot/app3
  3. 默认Type被勾选为 Directory,一定要去掉勾选。
【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)第4张

4:多应用访问效果如下

【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)第5张

5: 特别注意 -- 因为app1,app2,app3等应用的访问url为 host/app1等,所以在 Controller 代码中,RequestMapping的路径必须根据第三步中配置路径名相匹配

如/app3的 Request Mapping设置必须为:

    @RequestMapping("/app3")
    String hello() {
        return "Hello World!";
    }

    @RequestMapping("/app3/newhello")
    String hello2() {
        return "Hello World,this is hello2 result!";
    }

参考资料

快速入门:在 Azure 应用服务中创建 Java 应用https://docs.azure.cn/zh-cn/app-service/quickstart-java?tabs=javase&pivots=platform-windows

免责声明:文章转载自《【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C++奇数阶幻方(主动生成)jmeter负载机运行/添加压力机/分布式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

深入分析三层网络交换机的原理和设计

转:https://blog.csdn.net/zqixiao_09/article/details/51170124 引言     传统路由器在网络中起到隔离网络、隔离广播、路由转发以及防火墙的作业,并且随着网络的不断发展,路由器的负荷也在迅速增长。其中一个重要原因是出于安全和管理方便等方面的考虑,VLAN(虚拟局域网)技术在网络中大量应用。VLAN技术...

anyproxy-windows平台安装和抓手机app上https请求

前言 做接口测试肯定离不开抓包,目前比较流行的抓包工具是fiddler和charles,相信并不陌生。这里介绍一个阿里公司研发的一个抓包神器,只需打开web页面,就能抓到手机app上的http和https请求了。这样就有个好处,当一个公司测试团队有多个人的时候,只需搭建一个AnyProxy服务,其它小伙伴浏览器上打开AnyProxy页面,手机上设置个代理就...

Centos7下oracle配置(详细)

一、硬件配置 CentOS7@VMware® Workstation 15 Pro,分配资源:CPU:2颗,内存:4GB,硬盘空间:30GB 二、软件准备  linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip SecureCRT 三、虚拟机的配置 挂载镜像,配置本地yum源...

[译]在启用浏览器功能的INFOPATH表单中实现基于SQL SERVER的多级联动的下拉式列表

翻译:实现多级联动的下拉式列表 原文:http://blogs.msdn.com/infopath/archive/2006/10/12/cascading-dropdowns-in-browser-forms.aspx 如果你使用Office InfoPath客户端软件去创建解决方案,很方便地去使用“筛选”功能,去筛选下拉列表框的值,但是“筛选”功能在基...

Android APP性能测试笔记(一)

Android APP性能测试笔记(一) (1)工具使用       Android Studio  GT, root的真机 (2)记录apk大小(对比竞品)       使用Android Studio导入需要测试的apk 导入后,页面显示apk的大小   如果希望可以优化前后apk进行对比   (3)启动时间   冷启动:无数据的首次启动;...

软件测试 半路出家

1.软件测试  为什么有软件测试 当前国内软件行业已经不是功能为主了,用户不仅仅只是对于盯着软件的功能是否满足要求,还会对软件是否容易上手,执行效率是否 ok..... 等一系列其中体验都有了更高的要求,所以着也需要我们对软件进行大量的测试 , 有喜人喜欢创造,走上了开发岗位,而我们是为了 精益求精,为了完美所以才做的测试。 2.软件测试干啥的   找...