为 Azure 应用服务配置 Windows Java 应用Configure a Windows Java app for Azure App Service

Azure 应用服务可让 Java 开发人员在完全托管的基于 Windows 的服务中快速生成、部署和缩放其 Tomcat Web 应用程序。Azure App Service lets Java developers to quickly build, deploy, and scale their Tomcat web applications on a fully managed Windows-based service. 可以在命令行或者 IntelliJ、Eclipse 或 Visual Studio Code 等编辑器中使用 Maven 插件部署应用程序。Deploy applications with Maven plugins from the command line or in editors like IntelliJ, Eclipse, or Visual Studio Code.

本指南提供了 Java 开发人员可在应用服务中使用的重要概念和说明。This guide provides key concepts and instructions for Java developers using in App Service. 如果你从未用过 Azure 应用服务,首先应该通读 Java 快速入门If you've never used Azure App Service, you should read through the Java quickstart first. 应用服务 Windows 常见问题解答中解答了有关使用应用服务且非特定于 Java 开发的一般问题。General questions about using App Service that aren't specific to the Java development are answered in the App Service Windows FAQ.

部署应用Deploying your app

可以使用适用于 Maven 的 Azure Web 应用插件来部署 .war 文件。You can use Azure Web App Plugin for Maven to deploy your .war files. Azure Toolkit for IntelliJAzure Toolkit for Eclipse 还支持通过流行的 IDE 进行部署。Deployment with popular IDEs is also supported with Azure Toolkit for IntelliJ or Azure Toolkit for Eclipse.

如果不使用这些方法,则部署方法将取决于存档类型:Otherwise, your deployment method will depend on your archive type:

  • 若要将 .war 文件部署到 Tomcat,请使用 /api/wardeploy/ 终结点对存档文件执行 POST 操作。To deploy .war files to Tomcat, use the /api/wardeploy/ endpoint to POST your archive file. 有关此 API 的详细信息,请参阅此文档For more information on this API, please see this documentation.
  • 若要将 .jar 文件部署到 Java SE,请使用 Kudu 站点的 /api/zipdeploy/ 终结点。To deploy .jar files to Java SE, use the /api/zipdeploy/ endpoint of the Kudu site. 有关此 API 的详细信息,请参阅此文档For more information on this API, please see this documentation.

不要使用 FTP 来部署 .war。Do not deploy your .war using FTP. FTP 工具设计用来上传启动脚本、依赖项或其他运行时文件。The FTP tool is designed to upload startup scripts, dependencies, or other runtime files. 它不是用于部署 Web 应用的最佳选项。It is not the optimal choice for deploying web apps.

日志记录和调试应用Logging and debugging apps

可以通过 Azure 门户对每个应用使用性能报告、流量可视化和运行状况检查。Performance reports, traffic visualizations, and health checkups are available for each app through the Azure portal.

使用网络流量记录器Use Flight Recorder

应用服务上使用 Azul JVM 的所有 Java 运行时均附带 Zulu 网络流量记录器。All Java runtimes on App Service using the Azul JVMs come with the Zulu Flight Recorder. 可以使用它来记录 JVM、系统和 Java 级别事件,以监视 Java 应用程序中的行为并排查问题。You can use this to record JVM, system, and Java level events to monitor the behavior and troubleshoot problems in your Java applications.

若要进行定时记录,需要 Java 应用程序的 PID(进程 ID)。To take a timed recording you will need the PID (Process ID) of the Java application. 若要查找 PID,请打开浏览器,导航到 Web 应用的 SCM 站点 https://.scm.chinacloudsites.cn/ProcessExplorer/。To find the PID, open a browser to your web app's SCM site at https://.scm.chinacloudsites.cn/ProcessExplorer/. 此页面显示 Web 应用中正在运行的进程。This page shows the running processes in your web app. 在表中找到名为“java”的进程,并复制相应的 PID(进程 ID)。Find the process named "java" in the table and copy the corresponding PID (Process ID).

接下来,打开 SCM 站点顶部工具栏中的“调试控制台”,运行以下命令。Next, open the Debug Console in the top toolbar of the SCM site and run the following command. <pid> 替换为此前复制的进程 ID。Replace <pid> with the process ID you copied earlier. 此命令会启动对 Java 应用程序的 30 秒探查器记录,并在 D:\home 目录中生成名为 timed_recording_example.jfr 的文件。This command will start a 30 second profiler recording of your Java application and generate a file named timed_recording_example.jfr in the D:\home directory.

jcmd <pid> JFR.start name=TimedRecording settings=profile duration=30s filename="D:\home\timed_recording_example.JFR"

有关详细信息,请参阅 Jcmd 命令参考For more information, please see the Jcmd Command Reference.

分析 .jfr 文件Analyze .jfr files

使用 FTPS 将 JFR 文件下载到本地计算机。Use FTPS to download your JFR file to your local machine. 若要分析 JFR 文件,请下载并安装 Zulu Mission ControlTo analyze the JFR file, download and install Zulu Mission Control. 有关 Zulu Mission Control 的说明,请参阅 Azul 文档安装说明For instructions on Zulu Mission Control, see the Azul documentation and the installation instructions.

有关详细信息,请参阅使用 Azure CLI 流式处理日志For more information, see Streaming logs with the Azure CLI.

应用日志记录App logging

通过 Azure 门户或 Azure CLI 启用应用程序日志记录,以将应用服务配置为向本地文件系统或 Azure Blob 存储写入应用程序的标准控制台输出和标准控制台错误流。Enable application logging through the Azure portal or Azure CLI to configure App Service to write your application's standard console output and standard console error streams to the local filesystem or Azure Blob Storage. 在完成配置并经过 12 个小时后,将禁用记录到应用服务本地文件系统实例。Logging to the local App Service filesystem instance is disabled 12 hours after it is configured. 如果需要保留日志更长时间,请将应用程序配置为向 Blob 存储容器写入输出。If you need longer retention, configure the application to write output to a Blob storage container. 可以在 /LogFiles/Application/ 目录中找到 Java 和 Tomcat 应用日志。Your Java and Tomcat app logs can be found in the /LogFiles/Application/ directory.

如果应用程序使用 LogbackLog4j 进行跟踪,则你可以遵照在 Application Insights 中浏览 Java 跟踪日志中的日志记录框架配置说明,将这些用于审查的跟踪写入到 Azure Application Insights。If your application uses Logback or Log4j for tracing, you can forward these traces for review into Azure Application Insights using the logging framework configuration instructions in Explore Java trace logs in Application Insights.

自定义和优化Customization and tuning

Azure 应用服务原生支持通过 Azure 门户和 CLI 进行优化和自定义。Azure App Service supports out of the box tuning and customization through the Azure portal and CLI. 请查看以下文章了解非特定于 Java 的 Web 应用配置:Review the following articles for non-Java-specific web app configuration:

设置 Java 运行时选项Set Java runtime options

若要设置分配的内存或其他 JVM 运行时选项,请使用这些选项创建名为 JAVA_OPTS应用设置To set allocated memory or other JVM runtime options, create an app setting named JAVA_OPTS with the options. 应用服务在启动时,会将此设置作为环境变量传递给 Java 运行时。App Service passes this setting as an environment variable to the Java runtime when it starts.

在 Azure 门户中 Web 应用的“应用程序设置”下,创建名为 JAVA_OPTS 且包含其他设置的新应用设置,例如 -Xms512m -Xmx1204mIn the Azure portal, under Application Settings for the web app, create a new app setting named JAVA_OPTS that includes the additional settings, such as -Xms512m -Xmx1204m.

若要通过 Maven 插件配置应用设置,请在 Azure 插件部分中添加设置/值标记。To configure the app setting from the Maven plugin, add setting/value tags in the Azure plugin section. 以下示例设置特定的最小和最大 Java 堆大小:The following example sets a specific minimum and maximum Java heap size:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Xms512m -Xmx1204m</value>
    </property>
</appSettings>

在应用服务计划中运行包含一个部署槽位的单个应用程序的开发人员可以使用以下选项:Developers running a single application with one deployment slot in their App Service plan can use the following options:

  • B1 和 S1 实例:-Xms1024m -Xmx1024mB1 and S1 instances: -Xms1024m -Xmx1024m
  • B2 和 S2 实例:-Xms3072m -Xmx3072mB2 and S2 instances: -Xms3072m -Xmx3072m
  • B3 和 S3 实例:-Xms6144m -Xmx6144mB3 and S3 instances: -Xms6144m -Xmx6144m

优化应用程序堆设置时,请查看应用服务计划详细信息,并考虑多个应用程序和部署槽位方面的需求,以得出最佳内存分配。When tuning application heap settings, review your App Service plan details and take into account multiple applications and deployment slot needs to find the optimal allocation of memory.

启用 Web 套接字Turn on web sockets

在 Azure 门户中应用程序的“应用程序设置”中启用 Web 套接字支持。Turn on support for web sockets in the Azure portal in the Application settings for the application. 需要重启应用程序才能使设置生效。You'll need to restart the application for the setting to take effect.

在 Azure CLI 中使用以下命令启用 Web 套接字支持:Turn on web socket support using the Azure CLI with the following command:

az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true

然后重启应用程序:Then restart your application:

az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>

设置默认的字符编码Set default character encoding

在 Azure 门户中 Web 应用的“应用程序设置”下,创建名为 JAVA_OPTS 且包含值 -Dfile.encoding=UTF-8 的新应用设置。In the Azure portal, under Application Settings for the web app, create a new app setting named JAVA_OPTS with value -Dfile.encoding=UTF-8.

或者,可以使用应用服务 Maven 插件配置应用设置。Alternatively, you can configure the app setting using the App Service Maven plugin. 在插件配置中添加设置名称和值标记:Add the setting name and value tags in the plugin configuration:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Dfile.encoding=UTF-8</value>
    </property>
</appSettings>

预编译 JSP 文件Pre-Compile JSP files

若要提高 Tomcat 应用程序的性能,可以在部署到应用服务之前编译 JSP 文件。To improve performance of Tomcat applications, you can compile your JSP files before deploying to App Service. 可以使用 Apache Sling 提供的 Maven 插件,或使用此 Ant 生成文件You can use the Maven plugin provided by Apache Sling, or using this Ant build file.

安全应用程序Secure applications

对用户进行身份验证(简易身份验证)Authenticate users (Easy Auth)

在 Azure 门户中使用“身份验证和授权”选项设置应用身份验证。Set up app authentication in the Azure portal with the Authentication and Authorization option. 在此处,可以使用 Azure Active Directory 或社交登录名(例如 GitHub)启用身份验证。From there, you can enable authentication using Azure Active Directory or social logins like GitHub. 仅当配置单个身份验证提供程序时,Azure 门户配置才起作用。Azure portal configuration only works when configuring a single authentication provider. 有关详细信息,请参阅将应用服务应用配置为使用 Azure Active Directory 登录,以及其他标识提供者的相关文章。For more information, see Configure your App Service app to use Azure Active Directory login and the related articles for other identity providers. 如果需要启用多个登录提供程序,请遵照自定义应用服务身份验证一文中的说明。If you need to enable multiple sign-in providers, follow the instructions in the customize App Service authentication article.

TomcatTomcat

Tomcat 应用程序可以通过将主体对象强制转换为 Map 对象,直接从 servlet 访问用户的声明。Your Tomcat application can access the user's claims directly from the servlet by casting the Principal object to a Map object. 该 Map 对象将每个声明类型映射到该类型的声明集合。The Map object will map each claim type to a collection of the claims for that type. 在以下代码中,requestHttpServletRequest 的实例。In the code below, request is an instance of HttpServletRequest.

Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();

现在,可以在 Map 对象中检查任何特定声明。Now you can inspect the Map object for any specific claim. 例如,以下代码片段将循环访问所有声明类型,并输出每个集合的内容。For example, the following code snippet iterates through all the claim types and prints the contents of each collection.

for (Object key : map.keySet()) {
        Object value = map.get(key);
        if (value != null && value instanceof Collection {
            Collection claims = (Collection) value;
            for (Object claim : claims) {
                System.out.println(claims);
            }
        }
    }

若要将用户注销,请使用 /.auth/ext/logout 路径。To sign users out, use the /.auth/ext/logout path. 若要执行其他操作,请参阅有关应用服务身份验证和授权的用法文档。To perform other actions, please see the documentation on App Service Authentication and Authorization usage. Tomcat HttpServletRequest 接口及其方法也有相关的官方文档。There is also official documentation on the Tomcat HttpServletRequest interface and its methods. 以下 servlet 方法也是基于应用服务配置合成的:The following servlet methods are also hydrated based on your App Service configuration:

public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()

若要禁用此功能,请创建名为 WEBSITE_AUTH_SKIP_PRINCIPAL、值为 1 的应用程序设置。To disable this feature, create an Application Setting named WEBSITE_AUTH_SKIP_PRINCIPAL with a value of 1. 若要禁用应用服务添加的所有 servlet 筛选器,请创建名为 WEBSITE_SKIP_FILTERS、值为 1 的设置。To disable all servlet filters added by App Service, create a setting named WEBSITE_SKIP_FILTERS with a value of 1.

配置 TLS/SSLConfigure TLS/SSL

按照在 Azure 应用服务中使用 TLS 绑定保护自定义 DNS 名称中的说明上传现有的 SSL 证书,并将其绑定到应用程序的域名。Follow the instructions in the Secure a custom DNS name with a TLS binding in Azure App Service to upload an existing SSL certificate and bind it to your application's domain name. 默认情况下,应用程序仍允许 HTTP 连接 - 请遵循教程中的具体步骤来强制实施 SSL 和 TLS。By default your application will still allow HTTP connections-follow the specific steps in the tutorial to enforce SSL and TLS.

使用 KeyVault 引用Use KeyVault References

Azure KeyVault 使用访问策略和审核历史记录来提供集中式机密管理。Azure KeyVault provides centralized secret management with access policies and audit history. 可以在 KeyVault 中存储机密(例如密码或连接字符串),然后通过环境变量在应用程序中访问这些机密。You can store secrets (such as passwords or connection strings) in KeyVault and access these secrets in your application through environment variables.

首先,按照有关为应用授予对 Key Vault 的访问权限以及在应用程序设置中添加对机密的 KeyVault 引用的说明操作。First, follow the instructions for granting your app access to Key Vault and making a KeyVault reference to your secret in an Application Setting. 可以在远程访问应用服务终端时,通过输出环境变量来验证该引用是否解析为机密。You can validate that the reference resolves to the secret by printing the environment variable while remotely accessing the App Service terminal.

若要在 Spring 或 Tomcat 配置文件中注入这些机密,请使用环境变量注入语法 (${MY_ENV_VAR})。To inject these secrets in your Spring or Tomcat configuration file, use environment variable injection syntax (${MY_ENV_VAR}). 有关 Spring 配置文件,请参阅这篇有关外部化配置的文档。For Spring configuration files, please see this documentation on externalized configurations.

数据源Data sources

TomcatTomcat

这些说明适用于所有数据库连接。These instructions apply to all database connections. 你需要使用你选择的数据库的驱动程序类名称和 JAR 文件来填充占位符。You will need to fill placeholders with your chosen database's driver class name and JAR file. 下面提供了一个表,其中包含了常见数据库的类名称和驱动程序下载。Provided is a table with class names and driver downloads for common databases.

数据库Database 驱动程序类名称Driver Class Name JDBC 驱动程序JDBC Driver
PostgreSQLPostgreSQL org.postgresql.Driver 下载Download
MySQLMySQL com.mysql.jdbc.Driver 下载(选择“独立于平台”)Download (Select "Platform Independent")
SQL ServerSQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver 下载Download

若要将 Tomcat 配置为使用 Java 数据库连接 (JDBC) 或 Java 持久性 API (JPA),请先自定义在启动时由 Tomcat 读取的 CATALINA_OPTS 环境变量。To configure Tomcat to use Java Database Connectivity (JDBC) or the Java Persistence API (JPA), first customize the CATALINA_OPTS environment variable that is read in by Tomcat at start-up. 应用服务 Maven 插件中通过某个应用设置来设置这些值:Set these values through an app setting in the App Service Maven plugin:

<appSettings>
    <property>
        <name>CATALINA_OPTS</name>
        <value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
    </property>
</appSettings>

或者在 Azure 门户中的“配置” > “应用程序设置”页上设置环境变量。 Or set the environment variables in the Configuration > Application Settings page in the Azure portal.

接下来,确定数据源应当供一个应用程序使用,还是供在 Tomcat servlet 上运行的所有应用程序使用。Next, determine if the data source should be available to one application or to all applications running on the Tomcat servlet.

应用程序级数据源Application-level data sources

  1. 在项目的 META-INF/ 目录中创建一个 context.xml 文件。Create a context.xml file in the META-INF/ directory of your project. 如果 META-INF/ 目录不存在,请创建它。Create the META-INF/ directory if it does not exist.

  2. context.xml 中,添加一个 Context 元素以将数据源链接到 JNDI 地址。In context.xml, add a Context element to link the data source to a JNDI address. driverClassName 占位符替换为上表中你的驱动程序的类名称。Replace the driverClassName placeholder with your driver's class name from the table above.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${dbuser}"
            driverClassName="<insert your driver class name>"
            username="${dbpassword}"
            password="${connURL}"
        />
    </Context>
    
  3. 更新应用程序的 web.xml,以便在应用程序中使用该数据源。Update your application's web.xml to use the data source in your application.

    <resource-env-ref>
        <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>
    

完成配置Finalize configuration

最后,将驱动程序 JAR 放在 Tomcat 类路径中并重启应用服务。Finally, we will place the driver JARs in the Tomcat classpath and restart your App Service. 将 JDBC 驱动程序文件放入 /home/tomcat/lib 目录,确保它们可供 Tomcat 类加载器使用。Ensure that the JDBC driver files are available to the Tomcat classloader by placing them in the /home/tomcat/lib directory. (如果此目录尚未存在,请创建它。)若要将这些文件上传到应用服务实例,请执行以下步骤:(Create this directory if it does not already exist.) To upload these files to your App Service instance, perform the following steps:

  1. Azure CLI 中安装 webapp 扩展:In Azure CLI, install the webapp extension:

    az extension add --name webapp
    
  2. 运行以下 CLI 命令,创建从本地系统到应用服务的 SSH 隧道:Run the following CLI command to create an SSH tunnel from your local system to App Service:

    az webapp remote-connection create --resource-group <resource-group-name> --name <app-name> --port <port-on-local-machine>
    
  3. 使用 SFTP 客户端连接到本地隧道端口,并将文件上传到 /home/tomcat/lib 文件夹中。Connect to the local tunneling port with your SFTP client and upload the files to the /home/tomcat/lib folder.

另外,也可以使用某个 FTP 客户端上传 JDBC 驱动程序。Alternatively, you can use an FTP client to upload the JDBC driver. 请遵循这些用于获取 FTP 凭据的说明Follow these instructions for getting your FTP credentials.

配置 TomcatConfiguring Tomcat

若要编辑 Tomcat 的 server.xml 或其他配置文件,请首先记下门户中你的 Tomcat 主版本。To edit Tomcat's server.xml or other configuration files, first take a note of your Tomcat major version in the portal.

  1. 通过运行 env 命令查找你的版本的 Tomcat 主目录。Find the Tomcat home directory for your version by running the env command. 搜索以 AZURE_TOMCAT 开头并且与你的主版本匹配的环境变量。Search for the environment variable that begins with AZURE_TOMCATand matches your major version. 例如,AZURE_TOMCAT85_HOME 指向 Tomcat 8.5 的 Tomcat 目录。For example, AZURE_TOMCAT85_HOME points to the Tomcat directory for Tomcat 8.5.
  2. 查明你的版本的 Tomcat 主目录后,将配置目录复制到 D:\homeOnce you have identified the Tomcat home directory for your version, copy the configuration directory to D:\home. 例如,如果 AZURE_TOMCAT85_HOME 的值为 D:\Program Files (x86)\apache-tomcat-8.5.37,则所复制目录的新路径将为 D:\home\apache-tomcat-8.5.37For example, if AZURE_TOMCAT85_HOME had a value of D:\Program Files (x86)\apache-tomcat-8.5.37, the new path of the copied directory would be D:\home\apache-tomcat-8.5.37.

最后,请重启应用服务。Finally, restart your App Service. 你的部署应当转到 D:\home\site\wwwroot\webapps,跟以前完全一样。Your deployments should go to D:\home\site\wwwroot\webapps just as before.

配置 Java SEConfigure Java SE

在 Windows 上的 Java SE 中运行 .JAR 应用程序时,server.port 将在应用程序启动时传递为命令行选项。When running a .JAR application on Java SE on Windows, server.port is passed as a command line option as your application starts. 你可以从环境变量 HTTP_PLATFORM_PORT 手动解析 HTTP 端口。You can manually resolve the HTTP port from the environment variable, HTTP_PLATFORM_PORT. 此环境变量的值将是应用程序应侦听的 HTTP 端口。The value of this environment variable will be the HTTP port your application should listen on.

Java 运行时支持声明Java runtime statement of support

JDK 版本和维护JDK versions and maintenance

Azure 支持的 Java 开发工具包 (JDK) 为提供 Azul Systems 提供的 ZuluAzure's supported Java Development Kit (JDK) is Zulu provided through Azul Systems.

主版本更新将通过适用于 Windows 的 Azure 应用服务中的新运行时选项提供。Major version updates will be provided through new runtime options in Azure App Service for Windows. 客户可以通过配置应用服务部署来更新到这些较新的 Java 版本,他们需要负责测试和确保重大更新符合其需求。Customers update to these newer versions of Java by configuring their App Service deployment and are responsible for testing and ensuring the major update meets their needs.

支持的 JDK 将在每年的 1 月、4 月、7 月和 10 月按季度自动修补。Supported JDKs are automatically patched on a quarterly basis in January, April, July, and October of each year. 有关 Azure 上的 Java 的详细信息,请参阅此支持文档For more information on Java on Azure, please see this support document.

安全更新Security updates

重大安全漏洞的修补程序和修复程序将在 Azul Systems 提供后立即发布。Patches and fixes for major security vulnerabilities will be released as soon as they become available from Azul Systems. “重大”漏洞是根据 NIST 常见漏洞评分系统版本 2 提供的基本评分 9.0 或以上来定义的。A "major" vulnerability is defined by a base score of 9.0 or higher on the NIST Common Vulnerability Scoring System, version 2.

Tomcat 8.0 已经在 2018 年 9 月 30 日生命周期终止 (EOL)。Tomcat 8.0 has reached End of Life (EOL) as of September 30, 2018. 尽管该运行时在 Azure 应用服务上仍然可用,但 Azure 不会为 Tomcat 8.0 应用安全更新。While the runtime is still avialable on Azure App Service, Azure will not apply security updates to Tomcat 8.0. 如果可能,请将你的应用程序迁移到 Tomcat 8.5 或 9.0。If possible, migrate your applications to Tomcat 8.5 or 9.0. Tomcat 8.5 和 9.0 在 Azure 应用服务上都可用。Both Tomcat 8.5 and 9.0 are available on Azure App Service. 有关详细信息,请查看 Tomcat 官方网站See the official Tomcat site for more information.

弃用和停用Deprecation and retirement

如果即将停用某个受支持的 Java 运行时,则从停用该运行时之前的至少六个月开始,使用受影响运行时的 Azure 开发人员会收到弃用通知。If a supported Java runtime will be retired, Azure developers using the affected runtime will be given a deprecation notice at least six months before the runtime is retired.

本地开发Local development

开发人员可以从 Azul 下载站点下载 Azul Zulu Enterprise JDK Production Edition 进行本地开发。Developers can download the Production Edition of Azul Zulu Enterprise JDK for local development from Azul's download site.

开发支持Development support

使用符合条件的 Azure 支持计划进行 Azure 或 Azure Stack 方面的开发时,可以通过 Microsoft 获得对 Azure 支持的 Azul Zulu JDK 的产品支持。Product support for the Azure-supported Azul Zulu JDK is available through Microsoft when developing for Azure or Azure Stack with a qualified Azure support plan.

运行时支持Runtime support

如果开发人员有符合条件的支持计划,则可以通过 Azure 支持部门针对 Azul Zulu JDK 提出问题Developers can open an issue with the Azul Zulu JDKs through Azure Support if they have a qualified support plan.

后续步骤Next steps

本主题提供了对 Windows 上的 Azure 应用服务的支持的 Java 运行时声明。This topic provides the Java Runtime statement of support for Azure App Service on Windows.