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


    问题描述

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


    问题解答

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

    如正常部署一个jar包,App Service 根目录下的文件结构如下:

    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查看效果:


    部署多个Spring Boot应用的办法

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

    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,一定要去掉勾选。

    4:多应用访问效果如下

    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

    当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

  • 相关阅读:
    3 Steps to Perform SSH Login Without Password Using sshkeygen & sshcopyid
    排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
    Ubuntu 取消 Apache及MySQL等自启动
    linux screen 命令详解
    Ubuntu把家目录文件夹名称改为英文
    Ubuntu12.10 下 PPA安装搜狗输入法 for Linux
    VirtualBox虚拟机后台运行
    Ubuntu下安装jdk
    [整理篇]linux加入windows域之完美方案
    pxe 远程安装linux系统
  • 原文地址:https://www.cnblogs.com/lulight/p/15778747.html
Copyright © 2020-2023  润新知