通过 Java 和 Maven 创建你的第一个函数(预览版)

Note

用于 Azure Functions 的 Java 当前为预览版。

本快速入门可指导通过 Maven 创建无服务器函数项目,在本地对其进行测试,并将其部署到 Azure Functions。 完成后,可在 Azure 中运行 HTTP 触发的函数应用。

通过 cURL 从命令行中访问 Hello World 函数

如果没有 Azure 订阅,可在开始前创建一个试用帐户

先决条件

若要通过 Java 开发函数应用,必须安装以下软件:

Important

JAVA_HOME 环境变量必须设置为 JDK 的安装位置,以完成本快速入门。

安装 Azure Functions Core Tools

Azure Functions Core Tools 为通过终端或命令提示符编写、运行和调试 Azure Functions 提供了本地开发环境。

在继续操作之前在本地计算机上安装 Core Tools 版本 2

生成新的 Functions 项目

在空的文件夹中,运行以下命令以从 Maven archetype 生成 Functions 项目。

Linux/MacOS

mvn archetype:generate

Windows (CMD)

mvn archetype:generate

Maven 会请求你提供所需的值以完成项目的生成。 有关 groupId、artifactId 和 version 值,请参阅 Maven 命名约定参考。 AppName 值在 Azure 中必须唯一,以便 Maven 基于以前输入的 artifactId 生成默认应用名称。 PackageName 值确定所生成函数代码的 Java 包。

下面的 com.fabrikam.functionsfabrikam-functions 标识符用作示例,目的是使本快速入门中后面的步骤更易读。 建议你在此步骤中向 Maven 提供你自己的值。

Define value for property 'groupId': com.fabrikam.functions
Define value for property 'artifactId' : fabrikam-functions
Define value for property 'version' 1.0-SNAPSHOT : 
Define value for property 'package': com.fabrikam.functions
Define value for property 'appName' fabrikam-functions-20170927220323382:
Confirm properties configuration: Y

在此示例 fabrikam-functions 中,Maven 在新文件夹中创建名为 artifactId 的项目文件 项目中生成的可以运行的代码是一个简单的回显请求正文的 HTTP 触发函数:

public class Function {
    /**
     * This function listens at endpoint "/api/hello". Two ways to invoke it using "curl" command in bash:
     * 1. curl -d "HTTP Body" {your host}/api/hello
     * 2. curl {your host}/api/hello?name=HTTP%20Query
     */
    @FunctionName("hello")
    public HttpResponseMessage<String> hello(
            @HttpTrigger(name = "req", methods = {"get", "post"}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        // Parse query parameter
        String query = request.getQueryParameters().get("name");
        String name = request.getBody().orElse(query);

        if (name == null) {
            return request.createResponse(400, "Please pass a name on the query string or in the request body");
        } else {
            return request.createResponse(200, "Hello, " + name);
        }
    }
}

在本地运行函数

将目录更改为新创建的项目文件夹,并通过 Maven 生成和运行此函数:

cd fabrikam-functions
mvn clean package 
mvn azure-functions:run

Note

如果在使用 Java 9 时遇到 javax.xml.bind.JAXBException 异常,请参阅 GitHub 上的解决方法。

当函数在本地系统上运行并且做好响应 HTTP 请求的准备时,将显示以下输出:

Listening on http://localhost:7071
Hit CTRL-C to exit...

Http Functions:

   hello: http://localhost:7071/api/hello

使用 curl 在新的终端窗口中从命令行触发函数:

curl -w '\n' -d LocalFunction http://localhost:7071/api/hello
Hello LocalFunction!

在终端中使用 Ctrl-C 停止函数代码。

将函数部署到 Azure

部署到 Azure Functions 的过程中会使用 Azure CLI 中的帐户凭据。 在继续操作之前使用 Azure CLI 登录

az login

使用 azure-functions:deploy Maven 目标将代码部署到新的函数应用。

mvn azure-functions:deploy

部署完成后,将显示可用于访问你的 Azure 函数应用的 URL:

[INFO] Successfully deployed Function App with package.
[INFO] Deleting deployment package from Azure Storage...
[INFO] Successfully deleted deployment package fabrikam-function-20170920120101928.20170920143621915.zip
[INFO] Successfully deployed Function App at https://fabrikam-function-20170920120101928.chinacloudsites.cn
[INFO] ------------------------------------------------------------------------

使用 cURL 测试在 Azure 上运行的函数应用。 需更改以下示例中的 URL,使之与前一步骤中你自己的函数应用的已部署 URL 匹配。

curl -w '\n' https://fabrikam-functions-20170920120101928.chinacloudsites.cn/api/hello -d AzureFunctions
Hello AzureFunctions!

后续步骤

你已使用简单的 HTTP 触发器创建 Java 函数应用,并将其部署到 Azure Functions。

  • 有关开发 Java 函数的详细信息,请查看 Java 函数开发人员指南
  • 使用 azure-functions:add Maven 目标将具有不同触发器的其他函数添加到你的项目。
  • 使用 Visual Studio Code 在本地调试函数。 安装 Java 扩展包且在 Visual Studio Code 中打开 Functions 项目后,将调试器附加到端口 5005。 然后,在编辑器中设置断点,并在本地运行函数时触发函数:在 Visual Studio Code 中调试函数
  • 使用 Visual Studio Code 远程调试函数。 查看编写无服务器 Java 应用程序文档中的说明。